完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
stm32串口使用DMA模式接收发送数据
在cubeMX中调整DMA相关设置 在DMA Setting里点击Add添加USART1_TX,Mode有两种模式, 一种是普通模式,使用一次发送语句就发一次; 另一种是循环模式,使用一次发送会一直发送。 这里发送我选择普通模式,接收选择循环模式。 省略之前串口相关设置,想了解的可以看我之前串口的相关文章 生成代码, 定义相关变量 #define RXBUFFERSIZE 256 //最大接收字节数 char RxBuffer[RXBUFFERSIZE]; //接收数据 uint8_t aRxBuffer; //接收中断缓冲 uint8_t Uart1_Rx_Cnt = 0; //接收缓冲计数 在main函数中打开串口DMA循环接收 /* USER CODE BEGIN 2 */ HAL_UART_Receive_DMA(&huart1, (uint8_t *)&aRxBuffer, 1); /* USER CODE END 2 */ while循环中添加发送函数 HAL_Delay(1000); HAL_UART_Transmit_DMA(&huart1, (uint8_t *)"testn", 5); 重写接收中断回调函数,功能是把收到的数据再发送出去 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { /* Prevent unused argument(s) compilation warning */ UNUSED(huart); /* NOTE: This function Should not be modified, when the callback is needed, the HAL_UART_TxCpltCallback could be implemented in the user file */ if(Uart1_Rx_Cnt >= 255) //溢出判断 { Uart1_Rx_Cnt = 0; memset(RxBuffer,0x00,sizeof(RxBuffer)); HAL_UART_Transmit(&huart1, (uint8_t *)"数据溢出", 10,0xFFFF); } else { RxBuffer[Uart1_Rx_Cnt++] = aRxBuffer; //接收数据转存 if((RxBuffer[Uart1_Rx_Cnt-1] == 0x0A)&&(RxBuffer[Uart1_Rx_Cnt-2] == 0x0D)) //判断结束位 { HAL_UART_Transmit(&huart1, (uint8_t *)&RxBuffer, Uart1_Rx_Cnt,0xFFFF); //将收到的信息发送出去 while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX);//检测UART发送结束 Uart1_Rx_Cnt = 0; memset(RxBuffer,0x00,sizeof(RxBuffer)); //清空数组 } } //HAL_UART_Receive_DMA(&huart1, (uint8_t *)&aRxBuffer, 1); //再开启接收中断 } 这里为什么不用HAL_UART_Transmit_DMA() 这个函数呢? 实际测试过程中发现在回调函数中使用DMA方式发送数据会有丢包现象,在main函数中使用是没有问题的,暂时没有找到解决办法。 这里主要测试了DMA接收数据是正常的,使用DMA串口收发的主要目的也是防止大量接收串口数据时产生大量中断,占用大量cpu时间,导致程序运行卡顿。 运行结果 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1758 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1613 浏览 1 评论
1055 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1670 浏览 2 评论
1932浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
722浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
564浏览 3评论
590浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
548浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 07:32 , Processed in 0.534686 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号