[开发工具] STM32CubeMX_08 | 使用USART发送和接收数据(DMA模式)

[复制链接]
1759|29
 楼主| deadtime 发表于 2020-4-4 14:28 | 显示全部楼层
修改main函数

  1. int main(void)
  2. {
  3.   HAL_Init();

  4.   SystemClock_Config();

  5.   MX_GPIO_Init();
  6.   MX_DMA_Init();
  7.   MX_USART1_UART_Init();

  8.   /* USER CODE BEGIN 2 */
  9.   HAL_UART_Transmit(&huart1, (uint8_t*)dat, sizeof(dat), 0xFFFF);
  10.   HAL_UART_Receive_DMA(&huart1, recv_buf, 13);  //使能DMA接收
  11.   /* USER CODE END 2 */

  12.   while (1)
  13.   {
  14.   }
  15. }
 楼主| deadtime 发表于 2020-4-4 14:29 | 显示全部楼层
添加串口接收中断回调函数

  1. /* USER CODE BEGIN 4 */
  2. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  3. {
  4.     //将接收到的数据再发送
  5.     HAL_UART_Transmit(&huart1,recv_buf,13, 0xFFFF);
  6. }
  7. /* USER CODE END 4 */
 楼主| deadtime 发表于 2020-4-4 14:29 | 显示全部楼层
实验现象

545775e882949b494b.png
 楼主| deadtime 发表于 2020-4-4 14:30 | 显示全部楼层
至此,我们已经学会了如何配置USART使用DMA模式发送数据和接收数据,下一节将讨论实现printf()函数的多种方法。
sgq151679 发表于 2020-4-4 23:41 | 显示全部楼层
谢谢分享
caoenq 发表于 2020-4-26 15:31 | 显示全部楼层
deadtime 发表于 2020-4-4 14:26
4. 使用DMA接收串口数据
说明
      使用HAL库的时候不能同时使用DMA发送和接收数据,会出错。

请问楼主,HAL库的串口为何发送和接收不能同时使用DMA?是这个库的问题?还是单片机自身硬件就这样设计的?
磨砂 发表于 2020-5-6 16:23 | 显示全部楼层
速度能达到多少
晓伍 发表于 2020-5-6 16:23 | 显示全部楼层
代码非常详细
八层楼 发表于 2020-5-6 16:24 | 显示全部楼层
非常感谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部