找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5138|回复: 0
收起左侧

STM32F103串口DMA程序 发送前几次会接收不到数据,多发送几次就可以

[复制链接]
ID:361044 发表于 2019-3-6 17:11 | 显示全部楼层 |阅读模式
程序实现:在串口调试工具中发送数据,串口调试工具接收到相应数据,有需要的可以借鉴一下。
程序有些瑕疵,发送前几次会接收不到数据,多发送几次就可以接收到数据。
有大神愿意赐教,或者有相关资料分享,不胜感激!
  1. #include "system.h"
  2. #include "SysTick.h"
  3. #include "led.h"
  4. #include "usart.h"
  5. #include "key.h"
  6. #include "dma.h"
  7. #include "DMA_RX.h"
  8. #include <string.h>
  9. #define send_buf_len 5
  10. u8 send_buf[send_buf_len]="iACM";
  11. u8 USART_RX_BUF[35];//接收缓冲
  12. /*******************************************************************************
  13. * 函 数 名         : Send_Data
  14. * 函数功能                   : 要发送的数据
  15. * 输    入         : p:指针变量                        
  16. * 输    出         : 无
  17. *******************************************************************************/
  18. void Send_Data(u8 *p)
  19. {
  20.         
  21.         u16 i;
  22.         for(i=0;i<send_buf_len;i++)
  23.         {
  24.                 *p='5';
  25.                 p++;
  26.         }
  27. }


  28. /*******************************************************************************
  29. * 函 数 名         : main
  30. * 函数功能                   : 主函数
  31. * 输    入         : 无
  32. * 输    出         : 无
  33. *******************************************************************************/
  34. int main()
  35. {
  36.         u8 i=0;
  37.         u8 key;
  38.         
  39.         SysTick_Init(72);
  40.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组
  41.         LED_Init();
  42.         USART1_Init(9600);
  43.         KEY_Init();
  44.         DMAx_Init(DMA1_Channel4,(u32)&USART1->DR,(u32)send_buf,send_buf_len);
  45.         
  46.         DMA1_4_Init(DMA1_Channel5,(u32)&USART1->DR,(u32)USART_RX_BUF,35);
  47.         //Send_Data(send_buf);
  48.         USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);  //使能串口1的DMA发送     
  49.         DMAx_Enable(DMA1_Channel4,send_buf_len);     //开始一次DMA传输!
  50.         while(1)
  51.         {
  52. //                key=KEY_Scan(0);
  53. //                if(key==KEY_UP)
  54. //                {
  55.                         
  56.                

  57.                         //等待DMA传输完成,此时我们来做另外一些事
  58.                         //实际应用中,传输数据期间,可以执行另外的任务
  59. //                        while(1)
  60. //                        {
  61. //                                if(DMA_GetFlagStatus(DMA1_FLAG_TC4)!=0)//判断通道4传输完成
  62. //                                {
  63. //                                        DMA_ClearFlag(DMA1_FLAG_TC4);
  64. //                                        memset(send_buf,0,35);
  65. //                                        break;
  66. //                                }
  67. //                                led2=!led2;
  68. //                                delay_ms(300);        
  69. //                        }
  70.                         if(USART_RX_BUF[0])   
  71.                         {
  72.                                 send_buf[0]=USART_RX_BUF[0];
  73.                                 USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);  //使能串口1的DMA发送     
  74.                          DMAx_Enable(DMA1_Channel4,send_buf_len);     //开始一次DMA传输!
  75.                         delay_ms(10);
  76.                         
  77.                         //printf("%s\r\n",USART_RX_BUF);
  78.                         memset(USART_RX_BUF,0,35);
  79.                         memset(send_buf,0,35);                                
  80.                         MYDMA_Enable(DMA1_Channel5);
  81.                         }
  82. //                }
  83.                
  84.                 i++;
  85.                 if(i%20==0)
  86.                 {
  87.                         led1=!led1;
  88.                 }
  89.                
  90.                 delay_ms(10);        
  91.         }
  92. }
复制代码

DMA使用实验1.7z

183.28 KB, 下载次数: 28

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表