stm32-CUBE-串口通讯

1、使用cube配置NIVC中断,配置一下串口的中断
stm32-CUBE-串口通讯_第1张图片
2、配置串口
stm32-CUBE-串口通讯_第2张图片
3、如果要在线仿真,要记得配置SYS
stm32-CUBE-串口通讯_第3张图片
4、使用函数: HAL_UART_Transmit(&huart1,testbuff,10,0xFFFF);进行串口发送
5、过程中发现直接配置好的串口无法进入中断
在主函数加上 下面这两句就可以了
__HAL_UART_ENABLE_IT(&huart1, UART_IT_ERR);
__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);
6、最后注意,主控程序加了以后,只能进去一次中断
在中断程序最后也要加上。完成了
__HAL_UART_ENABLE_IT(&huart1, UART_IT_ERR);
__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);

DMA传输的串口通讯
1、配置基础上加DMA。DMA设置—ADD–选择–添加即可。把接受和发送都加上
stm32-CUBE-串口通讯_第4张图片

2、发送使用函数:HAL_UART_Transmit_DMA(&huart1,TxBuffer1,sizeof(TxBuffer1));
接收使用函数:
void USART1_IRQHandler(void)
{
HAL_UART_Receive_DMA(&huart1,RxBuffer1,10);
HAL_UART_IRQHandler(&huart1);
}

3、使用注意事项
HAL_UART_Receive_DMA(&huart1,RxBuffer1,10);这个函数应该在串口初始化就定义一次,告知我们中断接收长度,之前理解错误,放在串口中断里边才第一次定义,结果每次都收不到第一个字节。
另外:使用DMA传输中发现,串口发送时候会进入void USART1_IRQHandler(void)这个函数,如果不进行是否是接收中断判断,会造成错误。后来把串口接收数据部分放入DMA的IRQHandler里边,也就是DMA的接收中断里边,就什么也不需要判断了,非常简单。

你可能感兴趣的:(STM32)