STM32 学习笔记
跟随B站up主江协科技从零开始学习STM32,总结笔记,
循环过三天
这个作者很懒,什么都没留下…
展开
-
九、串口相关软件介绍
需要连接一个串口的电路,这个电路必须要能保证USART1和电脑进行串口通信(因为这个芯片的串口下载只适配了USART1)需要配置工程,生成一个HEX文件进入BootLoader程序后,STM32执行的程序就是不断接收USART1的数据,刷新到主闪存然后就下载成功了最后还要把BOOT引脚换回来,将跳线帽换到左边两个引脚,然后按一下复位。原创 2024-10-10 22:02:53 · 203 阅读 · 0 评论 -
九、6 串口收发数据包(代码)
写一个SendPacket函数,目的是调用一下这个函数,TxPacket数组的4个数据就会自动加上包头包尾发送出去。原创 2024-10-10 21:59:51 · 315 阅读 · 0 评论 -
九、5 USART串口数据包
数据包作用:把一个个单独的数据给打包起来,将同一批的数据进行打包和分割,方便接收方进行识别,方便我们进行多字节的数据通信。原创 2024-10-08 22:27:02 · 1023 阅读 · 0 评论 -
九、4 串口接收(代码)
RX对应PA10,需要初始化PA10。原创 2024-10-08 22:17:15 · 159 阅读 · 0 评论 -
九、3 串口发送+printf函数移植+打印汉字
可直接发送十六进制数 如0x41,也可直接发送字符 如'A'常用的汉字字符集有GB2312、GBK、GB18030等。收录了所有国家的字符的字符集:Unicode字符集,常用传输形式是UTF8。原创 2024-10-06 19:47:01 · 376 阅读 · 0 评论 -
九、2 USART串口外设
STM32的USART的同步模式只是多了个时钟输出,只支持时钟输出,不支持时钟输入。该同步模式更多是为了兼容别的协议或者特殊用途而设计的,并不支持两个USART之间进行同步通信,学习串口主要还是异步通信。原创 2024-10-04 22:53:46 · 868 阅读 · 0 评论 -
九、USART串口协议
在串口中只能发送二进制数,要发送字符,就需要一个数据到字符的映射表(如ASCII码表)如 0x41映射的字符为A,如果以HEX模式显示,就是数据本身,如果以文本模式显示,就会显示字符A。原创 2024-09-16 14:44:14 · 1024 阅读 · 0 评论 -
八、4 DMA+AD多通道(代码)
PA0接一个电位器,PA1~PA3接3个传感器的AO输出。将DMA初始化的部分复制到ADC_Cmd之前。(3)ADC单次扫描+DMA单次转运。(4)ADC连续扫描+DMA循环转运。首先扫描PA0~PA3这四个通道。将开启DMA时钟的函数挪到前面。(1)复制AD多通道的工程。原创 2024-09-15 11:14:13 · 326 阅读 · 0 评论 -
八、3 DMA数据转运(代码)
转运一次,传输计数器自减一次,当传输计数器减到0后(Size不再大于0),转运完成(第一个条件不再满足,转运停止),完成一次数组之间的数据转运。若将DataA放在外设站点,DataB放在存储器站点,传输方向就是外设站点—>存储器站点。2)触发源有触发信号(触发源为软件触发,一直有触发信号);(2)DMA是AHB总线的设备,要用AHB开启时钟。1)传输计数器大于0(传一个大于0的Size);(1)DMA函数介绍。原创 2024-09-09 22:56:11 · 353 阅读 · 0 评论 -
八、2 DMA数据转运 DMA函数介绍
若需要DMA的中断,就调用DMA_ITConfig,开启中断输出,再在NVIC里配置相应的中断通道,然后写中断函数。若使用硬件触发,要调用×××_DMACmd开启对应外设的触发信号的输出;去掉const不会影响程序运行,但会占用SRAM的空间。把数组定义在Flash中,可以节省SRAM的空间。(2)调用DMA_Init,初始化参数。(3)调用DMA_Cmd,通道使能。(1)RCC开启DMAD的时钟。原创 2024-09-01 20:55:28 · 388 阅读 · 0 评论 -
八、DMA直接存储器存取
DMA是一个数据转运小助手,用来协助CPU完成转运的工作。原创 2024-08-27 21:29:47 · 849 阅读 · 0 评论 -
七、4 AD多通道(代码)
扫描模式的转换,前几个通道转换完成后没有标志位,无法判断通道是否转换完成,因此配合DMA来实现。也可通过单次转换,非扫描模式来实现,只需在每次触发转换之前手动更改一下列表第一个位置的通道。利用扫描模式实现多通道,最好配合DMA来实现。光敏等模块的输出接AO(DO是数字输出)(2)在单通道的基础上进行修改。原创 2024-08-14 20:56:53 · 297 阅读 · 0 评论 -
七、3 AD单通道(代码)
(1)ADCCLK的配置函数(在rcc.h中)(2)ADC的库函数(在adc.h中)原创 2024-08-13 22:35:16 · 387 阅读 · 0 评论 -
七、2 ADC数模转换器有关函数介绍(Keil5)
(1)ADCCLK的配置函数(在rcc.h中)(2)ADC的库函数(在adc.h中)原创 2024-08-12 22:13:02 · 559 阅读 · 0 评论 -
七、1 ADC模数转换器介绍+有关知识点
GPIO只能读取引脚的高低电平,而ADC可以对高低电平之间的任意电平之间的任意电压进行量化,最终用一个变量来表示。读取这个变量就可以知道引脚的电压到底是多少。(将模拟信号转换为数字信号,是模拟电路到数字电路的桥梁)ADC就是相当于一个电压表,把引脚的电压值测出来,放在一个变量里。原创 2024-08-08 22:57:36 · 2034 阅读 · 0 评论 -
四、GPIO的8种工作模式
没有上拉电阻和下拉电阻去影响外部信号,但当引脚悬空时,就没有默认的电平了,输入受噪声干扰,来回不断地跳变。一般来说,默认高电平是一个习惯状态,所以上拉输入用的多;外部模块输出的默认状态,或外部输出功率非常小,就尽量选择。若外部模块空闲默认输出。若外部模块空闲默认输出。,默认输入第低电平。原创 2024-08-07 21:47:55 · 297 阅读 · 0 评论 -
六、8 TIM编码器计数和测速代码
一般来说,默认高电平是一个习惯状态,所以上拉输入用的多;若不确定外部模块输出的默认状态,或外部输出功率非常小,就尽量选择浮空输入。,没有上拉电阻和下拉电阻去影响外部信号,但当引脚悬空时,就没有默认的电平了,输入受噪声干扰,来回不断地跳变。3)输入捕获单元(只使用了滤波器和极性选择)若外部模块空闲默认输出低电平,就选择。若外部模块空闲默认输出高电平,就选择。上拉输入和下拉输入选择。:与外部模块保持一致。原创 2024-08-05 22:47:24 · 402 阅读 · 0 评论 -
六、7 TIM编码器接口介绍
正交编码器设计逻辑:首先把A相和B相的所有边沿作为计数器的计数时钟,出现边沿信号时,就计数自增或自减【增还是减由另一项的状态(高低电平)来决定,判断一个边沿就行】通过定时器的编码器接口,实现自动计次,不会占用软件资源,要不然每计一次数就要进一次中断,而且进中断只进行+1的这种简单操作。对于这种需要频繁执行,操作又比较简单的任务,一般可以设计一个硬件电路模块来自动完成,有硬件资源可优先考虑使用硬件资源。法2:利用正交信号(精度更高,A、B都可计次,相当于计次频率提高了一倍;(4)编码器结构和工作模式。原创 2024-08-04 18:02:13 · 313 阅读 · 0 评论 -
六、6 TIM输入捕获测频率代码和PWMI(测周法)
(1)RCC开启时钟,把GPIO和TIM的时钟打开(2)GPIO初始化,把GPIO配置成输入模式(一般选择上拉输入或浮空输入模式)(3)配置时基单元,让CNT计数器在内部时钟的驱动下自增运行(与之前代码一样)(4)初始化输入捕获单元(5)配置TRGI的触发源为TI1FP1(6)配置从模式为Reset(7)写读取CCR并计算频率的函数N为读取的CCR的值。原创 2024-08-03 17:51:29 · 921 阅读 · 0 评论 -
六、5 TIM输入捕获介绍
触发源选择中只有TI1FP1和TI1FP2,没有TI3和TI4的信号,若想使用从模式自动清零CNT,只能用通道1和通道2,若用通道3和4,只能开启捕获中断,在中断里手动清零。②测周法:测量一个周期就出一次结果(出结果速度取决于待测信号的频率,一般情况下,该方法结果更新快),结果值会受噪声的影响,波动比较大。③中界频率:当一个频率用测频法和测周法计次的N相同,就说明误差相同,该频率就是中界频率。CNT的值有上限,最大只能计65535个数,若信号频率太低,CNT计数值可能会溢出。(2)输入捕获(IC)介绍。原创 2024-08-02 22:06:44 · 587 阅读 · 0 评论 -
六、4 PWM 电机代码
③加大PWM频率,超出人耳听到声音的范围,就听不到蜂鸣器的响声了(人耳听到声音的频率范围是20Hz ~ 20KHz)(1)①复制呼吸灯的代码,将PWM.c和PWM.h文件中的通道1改为通道3,GPIO引脚改为Pin_2。②因为PWM占空比的范围是0~100%,所以可以设置点电机速度变化范围为 -100 ~ +100。即 Freq = CK_PSC / (PSC + 1) / (ARR + 1)可通过改变PSC(预分频)来改变PWM频率。PWM频率 = 计数器的更新频率。原创 2024-07-31 10:45:35 · 227 阅读 · 0 评论 -
六、3 PWM 舵机代码
同一个定时器的不同通道输出的PWM,频率相同(因为它们共用一个计数器),占空比可以各自设定(由各自CCR决定);CCR = (2000/180)* 角度 + 500 = (100/9)* 角度 + 500。占空比:0.5/20 ~ 2.5/20,即 1/40(0.025)~ 1/8(0.125)(2)舵机要求周期为20ms(50Hz),高电平宽度为0.5ms~2.5ms。先将PWM.c和PWM.h文件中的数据改为Pin_1,和通道2。即ARR+1=20K,PSC(预分频)=72。原创 2024-07-30 17:11:58 · 773 阅读 · 0 评论 -
六、2 写PWM代码(函数介绍、呼吸灯代码)
为了避免出现问题,①要么将结构体的所有成员都配置完整(没用的也配置一下),②要么就先给结构体成员都附一个初始值,再修改部分结构体成员。(3)配置输出比较单元(CCR的值、输出比较模式、极性选择、输出使能)(时基单元直接到输出比较单元,不用配置NVIC)(4)配置GPIO(把PWM对应的GPIO口初始化为复用推挽输出的配置)1)开启TIM时钟,选择时基单元的时钟,配置时基单元(初始化时基单元)输出比较模式,输出比较极性,输出状态(输出使能),设置CCR寄存器值。2)输出比较初始化(初始化通道)原创 2024-07-29 14:00:47 · 807 阅读 · 0 评论 -
六、1 TIM输出比较、PWM
OC(Output Compare)输出比较IC(Input Capture)输入捕获CC(Capture/Compare)输入捕获和输出比较单元CNT计数器CCR(Capture/Compare Register)捕获/比较寄存器REF(reference)参考信号。原创 2024-07-26 13:55:17 · 626 阅读 · 0 评论 -
五、3 定时器 外部时钟 代码
浮空输入一旦悬空,电平就会一直跳(若外部输入功率很小,内部的上拉电阻可能会影响到输入信号,这时可以用浮空输入,防止影响外部输入的电平)没有预分频,每遮挡一次CNT就会加一;有预分频,遮挡几次才会加一。此文章所列代码是在上篇文章代码的基础上进行的修改。(2)开启GPIO时钟,GPIO初始化。ETR引脚的外部时钟模式2配置。滤波器 f 和 N 的对应关系。此时也可以用上拉输入。原创 2024-07-25 21:01:14 · 438 阅读 · 0 评论 -
五、2 配置定时器(STM32)
操作步骤:开启时钟,选择时基单元的时钟,配置时基单元(初始化时基单元),使能更新中断,NVIC优先级分组和配置NVIC,启动定时器向上计数模式:在这种模式下,计数器从0开始计数,直到达到预设的自动加载值(TIMx_ARR),然后重新从0开始计数,并产生一个计数器溢出事件。这种模式适用于需要测量时间间隔或生成固定频率的脉冲的应用。向下计数模式:与向上计数模式相反,向下计数模式的计数器从自动加载值开始向下计数,直到达到0,然后重新从自动加载值开始计数,并产生一个计数器向下溢出事件。原创 2024-07-24 13:59:20 · 2257 阅读 · 0 评论 -
五、1 与定时器有关的函数介绍(STM32)
函数介绍。原创 2024-07-23 16:42:09 · 408 阅读 · 0 评论 -
四、EXTI 介绍
EXTI 和 NVIC 不需要开启时钟。原创 2024-07-19 14:49:13 · 576 阅读 · 0 评论 -
四、OLED显示屏
原创 2024-07-18 15:19:48 · 261 阅读 · 0 评论 -
三、stm32 C语言知识补充
包含 数据类型、宏定义、typedef、结构体、枚举。3、typedef(比宏定义更安全,但改名范围更小)(2)用 typedef 给结构体换名。原创 2024-07-15 21:54:52 · 405 阅读 · 0 评论 -
三、stm32 指针
(1)(在F盘里建一个命名为“test.txt”的文件夹,并输入内容AHelloWorld!为防止原来的值被修改,可进行一些操作(如加const,让指针指向的内容设置成只读)(3)*p , *出现在变量p的前面,表示取内容,把p指向的内容给取出来。(2)址传递(利用指针):例如数组的值比较多,可考虑用指针(间接引用)注意:int 4个字节,short 2个字节,char 1个字节。2.1.1(1)值传递:隔离数据,安全,若数据很多则比较费事。(2)int *p ,表示int型的指针。原创 2024-07-14 15:49:45 · 992 阅读 · 0 评论 -
二、进制转换
二进制(B)、八进制(O)、十进制(D)、十六进制(H)(1)十进制转十六进制:除十六取余,倒序排列。二到八 421,二到十六 8421。原创 2024-07-13 15:51:08 · 302 阅读 · 0 评论 -
一、用 Keil5 新建工程(STM32)
stm32新建工程原创 2024-07-12 10:21:42 · 716 阅读 · 0 评论