用到的是DMA发送数据,接收还是普通的串口接收。
一.代码生成
1.按以前的方法设置好时钟和调试方式,这里就不多说了。
2.设置串口1。
3.在DMA Setting里点击Add添加USART1_TX,Mode有两种模式,一种是普通模式,使用一次发送语句就发一次,另一种是循环模式,使用一次发送会一直发送。这里我选择普通模式。
4.在中断设置里打开串口1的中断。
5.时钟和文件路径等设置好,然后点生成代码。
二.代码编写
1.先定义发送和接收的数组。
/* USER CODE BEGIN 0 */ uint8_t aRxBuffer[1]; uint8_t aTxBuffer[]="ok"; /* USER CODE END 0 */
2.打开串口DMA的发送使能,while循环可以放一些LED的闪烁。
/* USER CODE BEGIN 2 */ HAL_UART_Receive_IT(&huart1,aRxBuffer,1); HAL_UART_Transmit_DMA(&huart1,aTxBuffer,sizeof(aTxBuffer)); /* USER CODE END 2 */
3.最后加上一个串口接收函数的回调函数,把接收到的数据再发出去。
/* USER CODE BEGIN 4 */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle) { HAL_UART_Transmit(&huart1,aRxBuffer,1,0); HAL_UART_Receive_IT(&huart1,aRxBuffer,1); } /* USER CODE END 4 */
现象:
上电之后,电脑的串口会收到“OK”,然后从电脑发送给芯片任意字符,芯片再发回来。
总结:只使用DMA做发送处理,接收还是用了串口接收中断。