STM32CUBEMX_HAL库 H750串口发送 接收固定长度
使用DMA和中断实现串口功能,接收固定长度字节。
若要实现任意长度字节,需要使用idle中断,后续补充。
使用stm32cubemx进行一些基础配置,生成初始化代码,
HAL_UART_Transmit(&huart1,tx_buf,size,100 );
发送函数,发送完直接接需要执行的操作,无需使用发送中断的函数HAL_UART_Transmit_IT();
关于发送字符串,printf等函数,只需要重新写一下即可,网上例程很多。
需要注意的是在keil工程下需要勾选上Use MicroLIB这个选项,(程序编译不会报错,但是烧录进入,便会出现死机的感觉)
DMA接收
HAL_UART_Receive_DMA(&huart1,rx_buf,1);
在初始化代码之后使用DMA接收函数,来使能中断,最后一个参数是size,表示接收到多少字节之后,进入回调函数,可以设置为1,那么接收到一个字节将进入中断,然后处理,但是这样会频繁进入中断,
串口中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
HAL_UART_Receive_DMA(&huart1, rx_buf, 1);
HAL_UART_Transmit(&huart1, rx_buf, 1,100);
}
在回调函数中需要使用HAL_UART_Receive_DMA(&huart1, rx_buf, 1); 重新使能中断,此处是将接收到的字节,再次发送。
还可以实现判断字节是否为帧尾,然后对一帧进行操作
***注意:***串口回调函数中,操作尽量少,否则频繁进入中断会出错,例如在回调函数中加printf的语句,串口便不工作了。
串口接收不定长数据后面再记录(idle+dma)。
STM32CUBEMX_HAL库 H750串口发送 接收固定长度
使用DMA和中断实现串口功能,接收固定长度字节。
若要实现任意长度字节,需要使用idle中断,后续补充。
使用stm32cubemx进行一些基础配置,生成初始化代码,
HAL_UART_Transmit(&huart1,tx_buf,size,100 );
发送函数,发送完直接接需要执行的操作,无需使用发送中断的函数HAL_UART_Transmit_IT();
关于发送字符串,printf等函数,只需要重新写一下即可,网上例程很多。
需要注意的是在keil工程下需要勾选上Use MicroLIB这个选项,(程序编译不会报错,但是烧录进入,便会出现死机的感觉)
DMA接收
HAL_UART_Receive_DMA(&huart1,rx_buf,1);
在初始化代码之后使用DMA接收函数,来使能中断,最后一个参数是size,表示接收到多少字节之后,进入回调函数,可以设置为1,那么接收到一个字节将进入中断,然后处理,但是这样会频繁进入中断,
串口中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
HAL_UART_Receive_DMA(&huart1, rx_buf, 1);
HAL_UART_Transmit(&huart1, rx_buf, 1,100);
}
在回调函数中需要使用HAL_UART_Receive_DMA(&huart1, rx_buf, 1); 重新使能中断,此处是将接收到的字节,再次发送。
还可以实现判断字节是否为帧尾,然后对一帧进行操作
***注意:***串口回调函数中,操作尽量少,否则频繁进入中断会出错,例如在回调函数中加printf的语句,串口便不工作了。
串口接收不定长数据后面再记录(idle+dma)。
举报