龙空技术网

STM32F4入坑日记——串口发送数据(中断发送)

VanChe 319

前言:

眼前看官们对“c语言串口发送数据”大致比较看重,同学们都想要了解一些“c语言串口发送数据”的相关内容。那么小编同时在网上汇集了一些有关“c语言串口发送数据””的相关知识,希望你们能喜欢,姐妹们一起来学习一下吧!

上篇日记我们说到串口采用非中断的方式发送数据,那么什么时候我们要采用中断的方式来发送数据呢?下面我分享一种需要采用中断发送的场景(当然,中断发送不是唯一一种适用此场景的方法)。

为了更好地体现出效果,我们先把上一篇日记中串口的波特率修改为9600bps。

将波特率修改为9600

然后将main.c的内容稍作修改,改为每50ms改变一次 LED灯的状态,每100ms发送一次串口数据(7个字节)。

第一次修改后的main.c文件

然后将编译完的程序下载到板子上,接上示波器,观察现象。

非中断发送7个字节的LED引脚波形

非中断发送7个字节的LED引脚波形

从上面两张图可以看到LED的闪烁频率是10Hz,并且高低电平的时间是一样的,即50ms翻转一次状态(用格式工厂将MP4转为GIF之后,看起来LED灯闪烁的频率居然变了,不过我们可以直接看示波器的波形)。这样子是符合我们原先的设想。但是如果我们将发送7个字节的数据改成发送80个字节那会是什么样的效果?直接修改程序。

非中断发送80个字节数据

还是编译下载,接上示波器。

非中断方法发送80个字节数据LED引脚波形

非中断方法发送80个字节数据LED引脚波形

虽然LED的闪烁频率没有发生改变,还是10Hz,但是高低电平的时间已经发生了改变,说明我们采用非中断(阻塞)的方法发送数据占用的时间比较长,已经影响到50ms执行一次的子程序了。下面我们改成中断发送的方法再看看现象。中断发送我们只需要修改一下CubeMX的工程配置,并使用另外一个发送函数——HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size);

先将工程中的串口全局中断打开

修改main.c中的串口发送函数

还是编译下载,接上示波器看现象。

中断方法发送80个字节数据LED引脚波形

中断方法发送80个字节数据LED引脚波形

从上面两个图可以看出LED引脚的波形又恢复正常了。好了,这就是要优先采用串口中断发送数据的场景。

标签: #c语言串口发送数据