STM32入门教程-2023持续更新中

持续更新中…………
一些小知识(为方便查找)
一、VCC、VDD、VEE、VSS
- 一般来说VCC=模拟电源,VDD=数字电源,VSS=数字地,VEE=负电源。
- 有些IC既有VDD引脚又有VCC引脚,说明这种器件自身带有电压转换功能。
- 对于数字电路来说,VCC是电路的供电电压,VDD是芯片的工作电压(通常Vcc>Vdd),VSS是接地点。
- 在场效应管(或COMS器件)中,VDD为漏极,VSS为源极,VDD和VSS指的是元件引脚,而不表示供电电压。
二、8种输入输出模式
1. GPIO_MODE_AIN 模拟输入
2. GPIO_MODE_IN_FLOATING 浮空输入
3. GPIO_MODE_IPD 下拉输入
4. GPIO_MODE_IPU 上拉输入
5. GPIO-MODE_OUT_OD 开漏输出
6. GPIO_MODE_OUT_PP 推挽输出
7. GPIO_MODE_AF_OD 复用开漏输出
8. GOIO_MODE_AF_PP 复用推挽输出
https://zhuanlan.zhihu.com/p/113367004




桥接:是指在两个网络之间搭一个桥,将两个网络连接到一块的意思。
- [2-1] 软件安装 P3 - 05:48
- [2-1] 软件安装 P3 - 07:22
- [2-1] 软件安装 P3 - 13:42
stm32库
STM32的开发方式主要有:
- 基于寄存器的方式
- 基手标准库(也就是库函数的方式)
- 本课程
- 基手HAL库的方式

************************


- //************
- 点击魔法棒,target->ARMCompiler选择V5.06
- 解决办法2:魔法棒-->target-->ARM Compiler-->Use default compiler version 5
- 这里up少讲了个东西,点击setting之后的第一个debug页面里面的port要改成sw,不然下载不成功
- 自动补全代码设置:点击Edit>Configuration>Text Completion>勾选Symbols after最后重新打开Keil就可以了
3-x GPIO


------------------------------------------------------------
- 第一步:使用RCC开启GPIO的时钟
- 第三步,使用GPI_Init函数初始化GPlO
- 第三步,使用输出或者输入的函数控制GPIO口
函数:
- RCC

- RCC_APB2PeriphClockCmd();
- GPIO输出

魔术棒->C/C++->勾选C99mode,就可以在中间定义了
------------------------------------------------------------





宏定义#define、typedef、结构体struct、枚举enum
------------------------------------------------------------
- GPIO输入
GPIO_ReadInputDataBit();
------------------------------------------------------------



开漏输出
GPIO_Mode_Out_OD 普通开漏输出,驱动能力不足,无法显示,更改为GPIO_Mode_Out_PP(推挽输出),正常显示
因为标准I2C是有上拉电阻的,没有信号总线高电平,所以要配置成开漏
-----------------------------------------------------------
keil的调试模式
-----------------EXTI外部中断-----------------



- 相同的Pin不能同时触发中断


或、与、非

数据选择器
-----------------------------------------------------------


配置外部中断
一、对射红外传感器
- 第一步,配置RCC,把我们这里涉及的外设的时钟都打开
- RCC_APB2PeriphClockCmd( //目前只有AFIO需要开启AFIO
- 第三步,配置GPIO,选择我们的端口为输入模式
- 第三步,配置AFIO,选择我们用的这一路GPIO,连接到后面的EXTI
- AFIO外设 AFIO中断引脚选择器10:10
- 第四步,配置EXTI,选择边沿触发方式,比如上升沿、下降沿或者双边沿
- EXTI EXTI边沿检测及控制 14:12
- 第五步,配置NVIC,给我们这个中断选择一个合适的优先级
- NVIC 分组管理 “叫号系统”
- AFIO //在GPIO文件中

- EXTI
- NVIC //在misc.h中
NVIC PriorityGroupConfig(); //这个函数是用来中断分组的,参数是中断分组的方式
1.先判断抢占优先级,高抢占优先级可以打断低抢占优先级的中断
2.如果抢占优先级相同,再判断响应优先级,高响应优先级不能打断低响应优先级
3.抢占优先级相同的中断,当中断同时发生时,响应级高的先执行
4.抢占和响应优先级都一样则哪个中断先发生,则执行哪个
- 写中断函数
二、旋转编码器
就是说一个中断在扭的时候有一个方向有延迟,虽然延迟很小(90度相位差),但是非常不爽
------------------------------------------------------------
TIM定时器

- 定时器本质上就是一个计数器


主模式触发DAC功能(数模转换)
--主从触发模式
这里可以看作把引过来定时器作为时钟,引过来的定时器中断一次本地的定时器的计数就加一。

PSC:prescaler、CNT:counter、ARR:autoreloadregister

计数器时序
公式:
计数器计数频率: CK_CNT=CK_PSC/(PSC+1)
计数器溢出频率:CK_CNT_OV=CK_CNT/(ARR+1)
=CK_PSC/(PSC+1)/(ARR+1)
预分频器和无预分频器区别……
RCC时钟树
------------------------------------------------------------
程序:

函数讲解
ITR应该就是InputTrigger的意思,选择来自其他的定时器的时钟作为输入触发
类比按键抖动延迟那个案例,频率低就是延时时间更长,消除抖动效果越好
定时器外部时钟
----------------输出比较--OC------------------
PWM


那个冻结模式,应该是当某一时刻CNT=CCR以后,之后REF就一直保持为原状态,即使CNT不等于CCR


- PWM频率: Freq=CK_PSC/(PSC+1)/(ARR+1)
- PWM占空比:Duty=CCR/(ARR+1)
- PWM分辨率:Reso=1/(ARR+1)
舵机


Q:不共地会有什么缺点呀?
A:不共地就没法形成回路,无法驱动

代码部分:

- 第一步,RCC开启时钟,把要用的TIM外设和GPIO外设的时钟打开
- 第二步,配置时基单元,包括前面的时钟源选择和的时基单元,都配置好
- 第三步,配置输出比较单元,里面包括CCR的值、输出比较模式、极性选择、输出使能这些参数
- 第四步,配置GPIO,把PWM对应的GPIO口,初始化为复用推挽输出的配置
- 第五步,运行控制了,启动计数器,这样就能输出PWM了
引脚重映射

直流电机
------------------输入捕获--IC------------------


主从触发模式

函数---主从触发模式
- 主从模式在上一节27分钟那里有讲,主模式是配置现在的外设去控制别的外设的,从模式是控制自己这时所配置的TIM3的
- 主模式是输出给别人 ic是输入捕获 选主模式干嘛
-------------ADC-----------------------

逐次逼近型ADC



转换模式:


- 配置ADCCLK(rcc.h里)
- ADC
*****************
跳……
------------------------------------------------------------
DMA

软件触发--(flash)
flash的数据是烧录时指定的,可以直接搬运,外设的数据要等待处理完再搬运
- 计算机系统的5大组成部分是: 运算器、控制器、存储器、输入设备和输出设备
- 其中运算器和控制器,一般会合在起,叫做CPU,所以算机的核心关键部分就是CPU和存储器

- ROM就是只读存储器,是一种非易失性、掉电不丢失的存储器
- RAM就是随机存储器,是一种易失性、掉电丢失的存储器
//待续……
//想学习但又不想学习呀 (´▽`)
//唉,我只有在不学习的时候才想学习 (´▽`)
------------------------------------------------------------