日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

正点原子STM32F103 DMA代码例程魔改

發布時間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 正点原子STM32F103 DMA代码例程魔改 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘要:學習了正點原子MINI板子(STM32F103)的DMA教程之后,感覺沒怎么學會,就得自己改改還能跑起來才算會了。魔改1:改為串口回顯,串口發送什么,用DMA傳回來什么。魔改2為立馬回顯,不需要按鍵按下去。

文章目錄

  • 魔改1:串口回顯
    • 步驟1
    • 步驟2
    • 步驟3
    • 步驟4
    • 結果展示
  • 魔改2
    • 步驟
    • 結果

魔改1:串口回顯

原先的程序是,固定的字符串,發送100遍,沒什么意思

  • 本來的思路是打算一個串口1,繼續這樣按鍵發送,自己再搞個串口做回顯,后來突然意識到一個問題,在串口調試助手發送的數據,到底是給哪個串口的呢?后來意識到只有串口1可用,別的串口沒有CH340,當然也能跳線,我的意思是只有一個CH340,一次只能一個串口,反正這個已經掌握了,就不用固定的字符發送了。
  • 在1中本來打算重新使能一個通道的,以為發送是(u32)&USART1->DR,接收是(u32)&USART1->SR,但是總感覺怪怪的(英文好像對不上),后來查手冊知道這個是一個名字兩個寄存器,根據讀寫操作進行區分
  • 步驟1

    注釋掉部分不用的代碼

    //注釋掉的部分 // for(i=0;i<SendBuff_LENTH;i++)//ì?3?ASCII×?·??ˉêy?Y // { // if(t>=TEXT_LENTH)//?óè???DD·? // { // SendBuff[i++]=0x0d; // SendBuff[i]=0x0a; // t=0; // }else SendBuff[i]=TEXT_TO_SEND[t++];//?′??TEXT_TO_SENDó??? // }

    步驟2

    MYDMA_Config函數改為下圖,并搬進while里面

    while(1){t=KEY_Scan(0);if(t==KEY0_PRES)//KEY0°′??{MYDMA_Config(DMA1_Channel4,(u32)&USART1->DR,(u32)USART_RX_BUF,USART_RX_STA &0x3F);

    步驟3

  • 修改顯示百分比
  • pro=1-pro/USART_RX_STA;

    步驟4

  • 將串口接收字符緩存位置歸0,串口緩存是不斷往后緩存的,而我們DMA發送是從起始位置發送n個字節,這樣如果不斷往后緩存,而發送的字節不變的話,很可能我們第二次發送給單片機的東西,在緩存數組的靠后位置,而我們發送前n個字節的時候,就很可能還是上一次發送的字符,所以我們讓新緩存的字符,覆蓋掉原先的字符
  • LCD_ShowNum(60,170,100,3,16);// LCD_ShowString(60,150,200,16,16,"Transimit Finished!");// USART_RX_STA=0;

    結果展示

    操作步驟:

  • 發送第一句話,按下KEY0
  • 發送第二句話,按下KEY0
  • 發送第n句話,按下KEY0
  • 魔改2

    老是要按下按鍵才能回顯,太麻煩了,想要發送之后立馬回顯的,不需要按下按鍵的。

    步驟

    在uasart.c文件中定義一個RX_state,用來表明串口接收完成

    再在主函數里面注釋掉按鍵的,改為根據RX_state來判斷,回顯完成,最后把RX_state=0;

    結果

    總結

    以上是生活随笔為你收集整理的正点原子STM32F103 DMA代码例程魔改的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。