STM32CubeMx——串口使用DMA收发数据

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM32CubeMx——串⼝使⽤DMA收发数据
⽤到的是DMA发送数据,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_DMA(&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);
}
/* USER CODE END 4 */
现象:
上电之后,电脑的串⼝会收到“OK”,然后从电脑发送给芯⽚任意字符,芯⽚再发回来。

总结:使⽤DMA做发送处理,接收数据后⽤串⼝发出去。

为什么接收到数据后不⽤HAL_UART_Transmit_DMA发送出去呢?使⽤这个发现丢包情况,因为这⾥只是测试DMA接收数据情况,接收到之后⼀般是作运算处理的,所以⽤⼀般串⼝发送验证接收的数据正确。

相关文档
最新文档