在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32F0xx_ DMA收發USART數據配置詳細過程

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-04-08 09:02 ? 次閱讀

前言

關于DMA(Direct Memory Access)的功能,前面關注我微信的人應該知道,其實我已經在F1芯片上簡單講了一下。有網友要求在F0講解一下使用DMA收發串口數據。今天就應網友要求總結一下在F0芯片上,使用DMA方式傳輸(收發)USART數據的功能。

在多種芯片上(F0、F1、F2、F3、F4)了解過DMA模塊功能的朋友可能會發現一個特點,就是DMA的功能有很多相似的地方,甚至是一樣。其實,每一個模塊在不同系列芯片(甚至不同廠商)基本上是大同小異,這就是所謂的觸類旁通。對于軟件開發也是一樣的,當你學會某一項語言的開發,接觸其他語言的開發就很容易了。這里我想說,其實我對ST大部分芯片(全系列芯片STM8STM32)都了解過,很多都是相似,只要有時間,后期還會總結一下STM8開發的的文章。當然,更多精彩內容也會出現(如:UCOS操作系統等)。

DMA的功能和用途這里就不在講述了,今天重點以查詢方式總結STM32F0xx使用DMA收發USART數據配置詳細過程 。另外提供一種以中斷方式使用DMA收發USART數據的軟件工程,感興趣的朋友請自行下載軟件工程源代碼進行研究。

下載

ST標準外設庫和參考手冊、數據手冊等都可以在ST官網下載,你也可以到我的360云盤下載。關于F0系列芯片的參考手冊有多個版本(針對F0不同芯片),但有一個通用版本,就是“STM32F0x128參考手冊V8(英文)2015-07”建議參考該手冊,以后如果你換用一種型號芯片也方便了解。

今天的軟件工程下載地址(360云盤):

查詢方式:

https://yunpan.cn/cSbcTa9ijncY2訪問密碼 152a

中斷方式:

https://yunpan.cn/cSbc7T4cxqWah訪問密碼 7e7f

STM32F0xx的資料可以在我360云盤下載:

https://yunpan.cn/cS2PVuHn6X2Bj訪問密碼 8c37

準備工作

在昨天的軟件工程基礎上,新建源程序文件(dma.c 和 dma.h),在工程中添加新建的源程序文件dma.c和使用到標準外設庫stm32f0xx_dma.c。如何在工程中添加源文件請看以前的文章“STM32F0_新建軟件工程詳細過程”,添加完成如下圖:


注意:

文件所在位置最好對應目錄,方便管理。比如:dma.c放在bsp文件下,添加在工程中Bsp組下面。

數據傳輸原理

DMA是介于內存(如:一個數組)和外設(如:USART、ADC等)之間進行數據交換的一個模塊控制器。從DMA的系統框圖(下圖)中也能大概看得出整個模塊數據傳輸的原理。關于DMA模塊在F0芯片中有幾點需要注意,請看最后重點。

配置過程詳情

①RCC時鐘


該函數位于bsp.c文件下面;

我個人習慣第一步配置時鐘,ST官方提供的例程也是把配置時鐘放在前面。關于RCC時鐘的配置比較重要,有好幾次我就是由于沒有配置相應RCC時鐘,讓我找了很久的問題,最后才發現是RCC時鐘沒有配置。

注意:

外設時鐘不要隨便添加,比如:RCC_APB1外設不要配置在RCC_APB2時鐘里面【如:RCC_APB2PeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);這樣能編譯過,但是錯誤的】

我每次都提醒RCC時鐘,是因為很多人就是因為時鐘而導致軟件運行有問題,所以,提醒更多人要注意配置RCC.

②DMA傳輸(內存->外設)的配置


該函數位于dma.c文件下面;

重點注意:

1、傳輸方向:這里是內存(數組) -> 外設(串口);

2、通道:使用MDA1通道2(串口發送)。

③DMA傳輸(外設->內存)的配置


該函數位于dma.c文件下面;

和上面注意的地方一樣,也是這兩個函數接口之間的差異。

④DMA傳輸串口的效果


該函數位于main.c文件下面;

這是實際運行的效果函數。

1、上電發送數據“DMA_Start...”;

2、等待接收10字節數據(DMA方式接收10字節數據);

3、DMA方式發送該10字節數據,等待發送完成。

4、依次循環下去。

今天的重點

A、通道的選擇

由于F0芯片有些芯片只有DMA1,沒有DMA2,有些DMA1有5個通道,有些DMA1有7個通道,這些需要根據手冊針對型號進行配置,這里不能選擇錯誤,否則不能使用DMA功能。

B、傳輸的長度

由于最大只能傳輸數量為65536,在實際項目開發中,可能有更大的數據需要傳輸,這時就需要分開傳輸才行。

C、傳輸數據寬度

數據的寬度如果傳輸兩者之間一樣的話,其實沒什么需要注意的。但是,如果數據寬度不同的話,這里就需要注意了,具體見手冊,這里只是提出來是重點,感興趣的朋友請自行研究啊。

說明

STM32F0的芯片軟件兼容性很好,可以適用于F0其他很多型號的芯片(具體請看手冊、或者親自測試)。

今天的工程是基于工程“STM32F0xx_TIM基本延時配置詳細過程”修改而來,以上實例總結僅供參考,若有不對之處,敬請諒解。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • dma
    dma
    +關注

    關注

    3

    文章

    561

    瀏覽量

    100586
  • USART
    +關注

    關注

    1

    文章

    195

    瀏覽量

    30857
  • STM32F0
    +關注

    關注

    0

    文章

    61

    瀏覽量

    17106
收藏 人收藏

    評論

    相關推薦

    記錄我的stm32開發學習過程

    : HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);// 設置中斷優先級 HAL_NVIC_EnableIRQ(USART1_IRQn); // 啟用中
    發表于 11-19 14:37

    STM32CUBEMX(6)--移植雅特力AT32F403AVGT7,雙串口通過DMA方式接收不定長數據

    END 3 * 中斷外部變量引用,在stm32f0xx_it.c中添加。 /* USER CODE BEGIN 0 */ #define BUFFERSIZE_usart2 255 //可接收的最大
    發表于 09-06 16:37

    STM32CUBEMX(3)--ADC通過DMA方式采樣,USART打印

    使用的產品型號的不同,有一個或兩個DMA模塊。 STM32F0XX DMA控制器總共有5個通道用于DMA1,每個通道都專門管理來自一個或多個外設的存儲器訪問請求。它具有一個仲裁器,用于
    發表于 09-04 14:08

    STM32CUBEMX(2)--USART通過DMA方式接收不定長數據

    的不同,有一個或兩個DMA模塊。 STM32F0XX DMA控制器總共有5個通道用于DMA1,每個通道都專門管理來自一個或多個外設的存儲器訪問請求。它具有一個仲裁器,用于處理不同的
    發表于 09-04 11:48

    【GD32F303紅楓派開發板使用手冊】第十六講 USART-DMA串口收發實驗

    在前面ADC章節中,我們介紹了DMA的工作原理,這里就不多做介紹。從GD32F303用戶手冊中可以查到,各串口的TX和RX分別對應DMA的不同通道,比如USART0的TX對應
    的頭像 發表于 06-15 09:54 ?1086次閱讀
    【GD32<b class='flag-5'>F</b>303紅楓派開發板使用手冊】第十六講 <b class='flag-5'>USART-DMA</b>串口<b class='flag-5'>收發</b>實驗

    STM32F103的DMA無法實現共存怎么解決?

    有幸在工程中用到STM32F103的DMA功能,而且是兩個串口(USART2和USART3)都需要用到DMA功能來實現
    發表于 05-11 07:14

    使用STM32F0STM32F4做遠程可插拔IO產品遇到的疑問求解

    的,主機LED指示燈顯示大多數處于超時階段,USB轉485抓的報文也證明從機沒有回復 五、串口軟件配置(STM32F051為例) void USART_Configuration(void
    發表于 04-22 06:09

    stm32f4xx的CAN對ID配置有要求嗎?CAN收發器是什么型號的?

    stm32f4xx的CAN疑問: 1)標準幀收發時,對CAN ID有特殊的要求或約束嗎?比如哪些CAN ID不能用? 2)CAN收發器是什么型號?對CAN數據鏈路層的編碼有特殊操作嗎?
    發表于 04-22 06:03

    USART3用DMA發送只能發送一次是什么原因導致的?

    單片機STM32F103R8T6,環境IAR8.22 請各位大神幫忙看下
    發表于 04-19 08:21

    STM32F103串口DMA+IDLE收發,速率過快會造成overrun數據溢出怎么解決?

    串口通訊是比較常用的通訊方式,本人以前都是單字節中斷接收,再開啟一個定時器做空閑判斷,和PC端做2ms收發無壓力。這樣做在高速度通訊過程中MCU會頻繁進入接收中斷,故而想測試一下DMA
    發表于 04-18 06:26

    STM32F103RCT6的USART1不能接收多字節數據是什么原因導致的?

    節的數據。5毫秒延時,STM32F103RCT6只能接收到2個字節的數據。 用實際上位機發送時,STM32F103RCT6能接收到最后1個字節的數據
    發表于 04-17 06:35

    求助,關于STM32F107RCT的USART3的DMA接收問題求解

    以下測試都是在目前最新版CubeMX+F1xx支持包生成代碼下進行。 問題描述: 使用usart3,rx設置dma收入,circular模式,一次dma收取128Byte,到一個靜態
    發表于 04-10 07:39

    STM32G071串口1無法使用DMA收發是為什么?

    首先說一下過程,之前在F1,F0上使用DMA串口發送和接收數據,開啟空閑中斷接收不定長數據,都沒
    發表于 04-01 07:46

    STM32F405 uart DMA收發數據輸出亂碼怎么解決?

    亂碼,波特率設置無誤(debug顯示接收數據正常)請問是不是哪里配置不對? cube生成代碼之外user config如下: void usart_transmit_buffer_f( uint8_t
    發表于 03-08 07:38

    STM32F405 DMA+空閑中斷接收,DMA_GetCurrDataCounter(DMA1_Stream1)與實際發送數據不符怎么解決?

    我在寫STM32F405 DMA+空閑中斷接收。用的USART3。 看了網上很多調試的帖子,但都不行。求幫忙! 1)我設置的BufferSize是16,必須要滿足16個數后,才能觸發我的空閑中斷
    發表于 03-07 08:28
    主站蜘蛛池模板: 色婷五月| 久青草视频在线| 久久青草视频| 亚洲 欧美 日韩 丝袜 另类| 东北美女野外bbwbbw免费| 国产精品久久自在自2021| 日本特级黄色大片| 夜夜操天天射| 男人操女人在线观看| 五月亭亭免费高清在线| 国产日韩精品一区二区三区| 看片一区| 一区二区美女视频| 国产视频日本| 操操操综合| 五月情婷婷| 91激情网| 27pao强力打造高清免费高| 三级在线观看视频| 在线www 天堂网在线| yiren22亚洲综合高清一区| 四虎精品免费国产成人| 1314亚洲人成网站在线观看| 888米奇在线视频四色| 三级理论在线观看| 天天做天天爱天天爽| 日本高清免费aaaaa大片视频| 女性一级全黄生活片免费看 | 国产精品国产三级国产在线观看| 国产一级在线观看| 天天摸日日添狠狠添婷婷| 一级一级女人18毛片| 国产一级做a爰片久久毛片男| 91精品福利久久久| 色色色色色色色色色色色| 国产你懂的视频| 国内啪啪| 性 色 黄 一级| 亚洲插| 精品一区亚洲| www.激情网.com|