cubemx uart收发

今天写了点单片机,因为这块不是经常写,需要把一些经验教训记录下,免得以后再走弯路。
1 uart收发三种方式 阻塞,中断,dma
2 阻塞发送没问题,接受我没成功;
3 中断方式接受发送都没问题,但是接收如果buf过长,发送几次才能echo,而且中断中不能写运行太长的函数;
4 dma最稳定,但是记住,dma接收,就不能dma发送了,最佳方式dma接受,阻塞发送。需要配置uart 中断以及dma 接受,注意mod circular。

代码其实简单:
全局变量:

/* USER CODE BEGIN PFP */
uint8_t recv_buf[13] = {0};
/* USER CODE END PFP *

main函数:


  /* USER CODE BEGIN 2 */
  uint8_t data[] = "Hello, I am Mculover666.\n";
  HAL_UART_Transmit(&huart1, data, sizeof(data), 500);
  HAL_UART_Receive_DMA(&huart1, recv_buf, sizeof(recv_buf)); //使能DMA接收
  /* USER CODE END 2 */

回调:

/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  HAL_UART_Transmit(&huart1, recv_buf, sizeof(recv_buf), 500);
}
/* USER CODE END 4 *

keil快捷键,f7编译,然后上传,串口助手就可以看结果。以上都是把业务逻辑去掉,关键硬件交互代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值