前面提到了使用串口的HAL库函数实现基本串口数据收发的功能,但是在实际应用中并不大,这里评测和推荐数据发送和接收两个比较好用的方式。 输出重定向 前面的例子中,我们为了发送数据,使用了C语言库函数sprintf先格式化字符串,然后再将字符串通过串口发送,虽然可以使用,但是比较麻烦, 需要自己先规划一个缓冲区,很多人应该在其他的控制器开发中也使用到了printf 重定向的技术,在STM32CubeIDE中也可以很方便的实现。 首先,在main.c函数中,加入如下代码:
留意此处代码放置的问题,有些刚上手的小伙伴会说每次生成代码以后就会把自己写的代码覆盖,其实这个地方的开发者都为我们规划好了位置,放在这些预留位置中间的话,就不会被覆盖了。上面这段代码中,先判断编译器是否为GNUC(实际上就是的),然后决定重定向的函数是__io_putchar还是fputc函数。 接下来,就可以在函数中愉快的使用printf了,例如:
但是你会非常不幸的收到报错: 已经说的很清楚了,浮点数需要打开相应设置里面的支持,按照说明如下: 然后编译运行下载即可,运行效果如下: 至于其他的格式这里就不一一评测了。 空闲中断 相对于发送而言,接收具有很大的不确定性,程序很难知道什么时候外界会输入多少字节的数据给MCU,因此,使用轮询方式是一种高资源占用低效率处理的方式,更好的一种方法自然是使用中断了。得益于MCU的良好设计,在以前使用STM32F1系列标准库的时候,就可以使用接收空闲中断这种方式处理外界发送给MCU的数据,具体实现方式如下: 先将STM32U545的串口1中断使能: 然后,增加一个缓冲区(用于存放所接收的数据),并打开相关中断:
并编写相应的中断处理函数:
上面这个接收中断处理函数,首先判断外设是否为USART1,然后简单处理一下所接收的数据(计算字节数)并输出,当然, 中断函数应该追求短小精悍、简单快捷的原则,更多的工作可以留到while(1)中去处理,上面的代码作为示例看看就行。 最后编译下载并运行,测试效果如下: 话说,这个编辑器不使用的残图怎么去掉,我一直没整明白。 |
IDE删除编译中间文件
STM32G系列RS485自动收发控制以及自适应波特率实战
STM32CubeIDE 快速入门指南
【NUCLEO-WB09KE评测】BLE创建服务和写特征控制LED
【STM32H7S78-DK评测】CoreMark移植和优化--兼记printf重定向实现方法及常见问题
基于STM32CubeIDE+MPU6050做的动量轮平衡自行车(一)
【NUCLEO-WB09KE评测】使用I2C点亮一个OLED
【NUCLEO-WB09KE评测】STM32WB09KE的内部BootLoader使用
【NUCLEO-WB09KE评测】USART的printf和GPIO的使用
STM32CubeIDE 1.3.0 汉化方法
U5的串口收发速度咋样
[md]我个人感觉是够用的