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进制)代替
———————————————— 版权声明:周云川 |
微信公众号
手机版