- 博客(61)
- 收藏
- 关注
原创 九、串口相关软件介绍
需要连接一个串口的电路,这个电路必须要能保证USART1和电脑进行串口通信(因为这个芯片的串口下载只适配了USART1)需要配置工程,生成一个HEX文件进入BootLoader程序后,STM32执行的程序就是不断接收USART1的数据,刷新到主闪存然后就下载成功了最后还要把BOOT引脚换回来,将跳线帽换到左边两个引脚,然后按一下复位。
2024-10-10 22:02:53
250
原创 九、6 串口收发数据包(代码)
写一个SendPacket函数,目的是调用一下这个函数,TxPacket数组的4个数据就会自动加上包头包尾发送出去。
2024-10-10 21:59:51
359
原创 九、5 USART串口数据包
数据包作用:把一个个单独的数据给打包起来,将同一批的数据进行打包和分割,方便接收方进行识别,方便我们进行多字节的数据通信。
2024-10-08 22:27:02
2037
原创 九、3 串口发送+printf函数移植+打印汉字
可直接发送十六进制数 如0x41,也可直接发送字符 如'A'常用的汉字字符集有GB2312、GBK、GB18030等。收录了所有国家的字符的字符集:Unicode字符集,常用传输形式是UTF8。
2024-10-06 19:47:01
706
原创 九、2 USART串口外设
STM32的USART的同步模式只是多了个时钟输出,只支持时钟输出,不支持时钟输入。该同步模式更多是为了兼容别的协议或者特殊用途而设计的,并不支持两个USART之间进行同步通信,学习串口主要还是异步通信。
2024-10-04 22:53:46
973
原创 九、USART串口协议
在串口中只能发送二进制数,要发送字符,就需要一个数据到字符的映射表(如ASCII码表)如 0x41映射的字符为A,如果以HEX模式显示,就是数据本身,如果以文本模式显示,就会显示字符A。
2024-09-16 14:44:14
1128
原创 八、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
372
原创 八、3 DMA数据转运(代码)
转运一次,传输计数器自减一次,当传输计数器减到0后(Size不再大于0),转运完成(第一个条件不再满足,转运停止),完成一次数组之间的数据转运。若将DataA放在外设站点,DataB放在存储器站点,传输方向就是外设站点—>存储器站点。2)触发源有触发信号(触发源为软件触发,一直有触发信号);(2)DMA是AHB总线的设备,要用AHB开启时钟。1)传输计数器大于0(传一个大于0的Size);(1)DMA函数介绍。
2024-09-09 22:56:11
389
原创 八、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
427
原创 四、4 逻辑操作符
只要有一个为真(非0),结果就为真(为1)左边和右边都为真,结果为真(为1)有一个为假,结果为假(为0)按位与、按位或关注二进制位。逻辑与、逻辑或只关注真假。2、|| 逻辑或(或者)1、&&逻辑与(并且)
2024-08-22 21:19:02
601
原创 四、1 算数操作符&位操作符
在十进制中异或,a^a = 0(相同为0);(2)“ | ”按位或,有1为1,全为0则为0;(3)“ ^ ”按位异或,相同为0,相异为1.(1)“&”按位与,有0为0,全为1则为1;进行浮点数除法,操作符两端至少有一个浮点数。负数原码到补码,先取反后加一;负数补码到原码,先减一后取反;2、位操作符(只适用于整型)(2)“ % ”取模,得到。(1)“ / ”得到一个。正数的原码和补码相同。
2024-08-15 22:28:41
556
原创 七、4 AD多通道(代码)
扫描模式的转换,前几个通道转换完成后没有标志位,无法判断通道是否转换完成,因此配合DMA来实现。也可通过单次转换,非扫描模式来实现,只需在每次触发转换之前手动更改一下列表第一个位置的通道。利用扫描模式实现多通道,最好配合DMA来实现。光敏等模块的输出接AO(DO是数字输出)(2)在单通道的基础上进行修改。
2024-08-14 20:56:53
491
原创 七、1 ADC模数转换器介绍+有关知识点
GPIO只能读取引脚的高低电平,而ADC可以对高低电平之间的任意电平之间的任意电压进行量化,最终用一个变量来表示。读取这个变量就可以知道引脚的电压到底是多少。(将模拟信号转换为数字信号,是模拟电路到数字电路的桥梁)ADC就是相当于一个电压表,把引脚的电压值测出来,放在一个变量里。
2024-08-08 22:57:36
3248
原创 四、GPIO的8种工作模式
没有上拉电阻和下拉电阻去影响外部信号,但当引脚悬空时,就没有默认的电平了,输入受噪声干扰,来回不断地跳变。一般来说,默认高电平是一个习惯状态,所以上拉输入用的多;外部模块输出的默认状态,或外部输出功率非常小,就尽量选择。若外部模块空闲默认输出。若外部模块空闲默认输出。,默认输入第低电平。
2024-08-07 21:47:55
346
原创 六、8 TIM编码器计数和测速代码
一般来说,默认高电平是一个习惯状态,所以上拉输入用的多;若不确定外部模块输出的默认状态,或外部输出功率非常小,就尽量选择浮空输入。,没有上拉电阻和下拉电阻去影响外部信号,但当引脚悬空时,就没有默认的电平了,输入受噪声干扰,来回不断地跳变。3)输入捕获单元(只使用了滤波器和极性选择)若外部模块空闲默认输出低电平,就选择。若外部模块空闲默认输出高电平,就选择。上拉输入和下拉输入选择。:与外部模块保持一致。
2024-08-05 22:47:24
434
原创 六、7 TIM编码器接口介绍
正交编码器设计逻辑:首先把A相和B相的所有边沿作为计数器的计数时钟,出现边沿信号时,就计数自增或自减【增还是减由另一项的状态(高低电平)来决定,判断一个边沿就行】通过定时器的编码器接口,实现自动计次,不会占用软件资源,要不然每计一次数就要进一次中断,而且进中断只进行+1的这种简单操作。对于这种需要频繁执行,操作又比较简单的任务,一般可以设计一个硬件电路模块来自动完成,有硬件资源可优先考虑使用硬件资源。法2:利用正交信号(精度更高,A、B都可计次,相当于计次频率提高了一倍;(4)编码器结构和工作模式。
2024-08-04 18:02:13
333
原创 六、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
1018
原创 六、5 TIM输入捕获介绍
触发源选择中只有TI1FP1和TI1FP2,没有TI3和TI4的信号,若想使用从模式自动清零CNT,只能用通道1和通道2,若用通道3和4,只能开启捕获中断,在中断里手动清零。②测周法:测量一个周期就出一次结果(出结果速度取决于待测信号的频率,一般情况下,该方法结果更新快),结果值会受噪声的影响,波动比较大。③中界频率:当一个频率用测频法和测周法计次的N相同,就说明误差相同,该频率就是中界频率。CNT的值有上限,最大只能计65535个数,若信号频率太低,CNT计数值可能会溢出。(2)输入捕获(IC)介绍。
2024-08-02 22:06:44
611
原创 六、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
306
原创 六、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
869
原创 六、2 写PWM代码(函数介绍、呼吸灯代码)
为了避免出现问题,①要么将结构体的所有成员都配置完整(没用的也配置一下),②要么就先给结构体成员都附一个初始值,再修改部分结构体成员。(3)配置输出比较单元(CCR的值、输出比较模式、极性选择、输出使能)(时基单元直接到输出比较单元,不用配置NVIC)(4)配置GPIO(把PWM对应的GPIO口初始化为复用推挽输出的配置)1)开启TIM时钟,选择时基单元的时钟,配置时基单元(初始化时基单元)输出比较模式,输出比较极性,输出状态(输出使能),设置CCR寄存器值。2)输出比较初始化(初始化通道)
2024-07-29 14:00:47
924
原创 六、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
669
原创 五、3 定时器 外部时钟 代码
浮空输入一旦悬空,电平就会一直跳(若外部输入功率很小,内部的上拉电阻可能会影响到输入信号,这时可以用浮空输入,防止影响外部输入的电平)没有预分频,每遮挡一次CNT就会加一;有预分频,遮挡几次才会加一。此文章所列代码是在上篇文章代码的基础上进行的修改。(2)开启GPIO时钟,GPIO初始化。ETR引脚的外部时钟模式2配置。滤波器 f 和 N 的对应关系。此时也可以用上拉输入。
2024-07-25 21:01:14
453
原创 五、2 配置定时器(STM32)
操作步骤:开启时钟,选择时基单元的时钟,配置时基单元(初始化时基单元),使能更新中断,NVIC优先级分组和配置NVIC,启动定时器向上计数模式:在这种模式下,计数器从0开始计数,直到达到预设的自动加载值(TIMx_ARR),然后重新从0开始计数,并产生一个计数器溢出事件。这种模式适用于需要测量时间间隔或生成固定频率的脉冲的应用。向下计数模式:与向上计数模式相反,向下计数模式的计数器从自动加载值开始向下计数,直到达到0,然后重新从自动加载值开始计数,并产生一个计数器向下溢出事件。
2024-07-24 13:59:20
4253
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人