找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5587|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

STM32F103串口DMA程序 發(fā)送前幾次會接收不到數(shù)據(jù),多發(fā)送幾次就可以

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:361044 發(fā)表于 2019-3-6 17:11 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
程序?qū)崿F(xiàn):在串口調(diào)試工具中發(fā)送數(shù)據(jù),串口調(diào)試工具接收到相應(yīng)數(shù)據(jù),有需要的可以借鑒一下。
程序有些瑕疵,發(fā)送前幾次會接收不到數(shù)據(jù),多發(fā)送幾次就可以接收到數(shù)據(jù)。
有大神愿意賜教,或者有相關(guān)資料分享,不勝感激!
  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. * 函 數(shù) 名         : Send_Data
  14. * 函數(shù)功能                   : 要發(fā)送的數(shù)據(jù)
  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. * 函 數(shù) 名         : main
  30. * 函數(shù)功能                   : 主函數(shù)
  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);  //中斷優(yōu)先級分組 分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發(fā)送     
  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.                         //實際應(yīng)用中,傳輸數(shù)據(jù)期間,可以執(zhí)行另外的任務(wù)
  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發(fā)送     
  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. }
復(fù)制代碼

DMA使用實驗1.7z

183.28 KB, 下載次數(shù): 29

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表