STMCU小助手
发布时间:2022-10-25 23:13
|
1 实现原理 使用串口通信可实现数据帧的收发,完成机器人控制、采集数据的传输等任务。制定串口通信协议并定时发送一帧数据,常见的处理方法是利用空闲中断,但STM32 HAL库好像没有专用的空闲中断,自己实现起来比较麻烦,这里利用非空中断可以实现同样的功能,缺点是效率比较低,稳定性经过测试也还可以,如果有更好的思路欢迎提出。 1.1 制定串口通信协议 制定串口通信协议时一帧数据的长度和内容可以自己定义,STM32的串口传输的数据类型为uint8_t,注意取值不要超过0-255,下面给出一个电机控制的串口通信协议表做示例
1.2 分析中间变量 创建接收数组g_fUART1_Buf,其长度等于串口通信协议一帧的长度 创建接收一个字节的暂存变量g_fUART1_Byte,配置一个字节中断一次 创建g_fNew_Pack用于主程序中判断是否接收到完整的一帧数据 创建g_fNew_Pack_Cnt记录成功接收一帧数据的次数,方便调试
1.3 接收数据的处理 新接收到的字节g_fUART1_Byte写入接收数组g_fUART1_Buf的末尾,每接收一个字节,就将前一个字节左移,保证新接收到的字节一直往数组里填充,当接收的字节超过接收数组的长度后,继续左移,去掉旧数据,填入新数据
2 STM32CubeMX配置 2.1 SWD调试接口配置 SWD接口用于程序的下载、在线调试
2.2 时钟树配置 STM32G0系列内嵌高精度(±1%)RC振荡时钟,无需外部时钟,所以这里并未使能外部高速时钟,开发板上也没有焊接,直接在时钟树配置选项的HCLK输入64,配置最大的64MHz时钟频率即可。
2.3 UART1串口配置 UART1用于接收上文制定的串口通信协议,并开启非空中断
2.4 生成工程 输入工程名,选择存放路径(不要有中文),选择IDE为MDK-ARM;只生成用到的文件(目的是提高工程编译速度,减少工程占用空间),并生成单独的.c/.h文件,点击生成代码
3 添加用户代码 3.1 定义全局变量
3.2 UART1中断初始化
3.3 UART1的printf重定向
3.4 UART1回调函数
3.5 接收数据的处理
4 效果演示 gif中为方便演示,除了帧头帧尾,没有使用上文串口协议定义的内容,用11 22等数据(16进制)代替
———————————————— 版权声明:周云川 |
经验分享 | STM32G0 I2C bootloader Go 命令后调试连接失败:DBG_SWEN 位复位修复
经验分享 | STM32G0B1 待机模式意外唤醒深度解析:RTC 结构体未初始化的隐形坑
经验分享 | STM32G0B1 待机模式意外唤醒深度解析:RTC 结构体未初始化的隐形坑
如何在STM32和Arduino上实现卷积神经网络
STM32与51单片机差异一文速览
STM32芯片命名规则
STM32 引脚到底有多少?为什么一个引脚能当好几个用?
【STM32入门学习路径指南】(四步走)
基于STM32G070RBT6驱动RC522
嵌入式-单片机-STM32 EXTI中断
微信公众号
手机版