赞
踩
STM32 的代码其实就是简单的UART串口通讯代码,但实质上是有很多坑!!!作者发现大部分博主并没有说明出坑所在,这部分作者将会为读者朋友把可能出现的坑给解决掉!
我们利用 Python 代码写一个循环发送数字的代码程序,具体代码如下:
import serial import time ser = serial.Serial('/dev/ttyAMA0',115200) # 串口初始化,根据实际情况修改串口号和波特率 # 定义要输出的数字 num = 196 while True: ser.write(str(int(num)).encode()) # 发送数字到串口 num += 1 if num > 205: num = 196 time.sleep(0.2) # 等待1秒钟
可以看出代码是非常简单的,但是这里读者朋友需要注意的是树莓派4B的端口发送至STM32的其实都是字符串流!在STM32端我们对发送过来的字符串流进行解码(很多博主其实都没有说明该点,导致很多朋友解码失败)!
1、RCC配置外部高速晶振(精度更高)——HSE;
2、SYS配置:Debug设置成Serial Wire(否则可能导致芯片自锁);
3、I2C配置:
4、USART1配置:设置UART1串口;波特率:115200;开启UART串口中断;
5、时钟树配置
6、工程配置
OLED模块主要是方便显示树莓派4B发送给STM32的数据信息!考虑到实际情况,我们一般需要根据树莓派4B发送过来的数字信息,所以,我们这里利用OLED进行数字显示!
小数显示API函数:
//z_len为整数显示位数,f_len为小数显示位数,size2为字体大小 void OLED_Showdecimal(u8 x,u8 y,float num,u8 z_len,u8 f_len,u8 size2) { u8 t,temp; u8 enshow; int z_temp,f_temp; z_temp=(int)num; //整数部分 for(t=0;t<z_len;t++) { temp=(z_temp/oled_pow(10,z_len-t-1))%10; if(enshow==0 && t<(z_len-1)) { if(temp==0) { OLED_ShowChar(x+(size2/2)*t,y,' ',size2); continue; } else enshow=1; } OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2); } //小数点 OLED_ShowChar(x+(size2/2)*(z_len),y,'.',size2); f_temp=(int)((num-z_temp)*(oled_pow(10,f_len))); //小数部分 for(t=0;t<f_len;t++) { temp=(f_temp/oled_pow(10,f_len-t-1))%10; OLED_ShowChar(x+(size2/2)*(t+z_len)+5,y,temp+'0',size2); } }
篇幅有限,OLED参考博客:http://t.csdn.cn
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。