快捷搜索:  汽车  科技

stm32串口发送指令(STM32F4入坑日记串口发送数据)

stm32串口发送指令(STM32F4入坑日记串口发送数据)从上面两张图可以看到LED的闪烁频率是10Hz,并且高低电平的时间是一样的,即50ms翻转一次状态(用格式工厂将MP4转为GIF之后,看起来LED灯闪烁的频率居然变了,不过我们可以直接看示波器的波形)。这样子是符合我们原先的设想。但是如果我们将发送7个字节的数据改成发送80个字节那会是什么样的效果?直接修改程序。非中断发送7个字节的LED引脚波形第一次修改后的main.c文件然后将编译完的程序下载到板子上,接上示波器,观察现象。非中断发送7个字节的LED引脚波形

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

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

stm32串口发送指令(STM32F4入坑日记串口发送数据)(1)

将波特率修改为9600

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

stm32串口发送指令(STM32F4入坑日记串口发送数据)(2)

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

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

stm32串口发送指令(STM32F4入坑日记串口发送数据)(3)

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

stm32串口发送指令(STM32F4入坑日记串口发送数据)(4)

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

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

stm32串口发送指令(STM32F4入坑日记串口发送数据)(5)

非中断发送80个字节数据

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

stm32串口发送指令(STM32F4入坑日记串口发送数据)(6)

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

stm32串口发送指令(STM32F4入坑日记串口发送数据)(7)

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

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

stm32串口发送指令(STM32F4入坑日记串口发送数据)(8)

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

stm32串口发送指令(STM32F4入坑日记串口发送数据)(9)

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

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

stm32串口发送指令(STM32F4入坑日记串口发送数据)(10)

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

stm32串口发送指令(STM32F4入坑日记串口发送数据)(11)

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

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

猜您喜欢: