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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

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

3天內不再提示

基于STM32L476芯片來做個演示

茶話MCU ? 來源:ST MCU 信息交流 ? 2019-11-20 14:57 ? 次閱讀

我們在做SPI應用時,有時希望通過定時器定時地觸發SPI的收發,并利用DMA完成數據的傳輸。這里,我基于STM32L476芯片來做個演示,以供參考【為什么選用32L476,其實沒啥特別原因,只是順手找了塊Nucleo板】。

本示例的大致過程是這樣的:

片內SPI1做Master,SPI2做Slave,均工作在全雙工模式。

這里使用片內定時器TIM3,借助它的更新事件觸發DMA請求,通過DMA將數據給到SPI1的數據寄存器并發送出去,同時也開啟SPI1接收事件的DMA傳輸。SPI2的收、發事件都啟用DMA傳輸來實現數據收發操作。

TIM3的更新時間控制兩個SPI的收發節奏,即定時器每產生一次更新事件,SPI1/SPI2這兩個主從通信模塊就進行一個數據的收發。我們可以通過調整定時器的計時周期來調整數據收發的快慢節奏。

好,先基于STM32CubeMx進行初始化配置。

1、對TIM3做基本配置。選擇時鐘源,先大致估算個定時器計時周期,調試時我們可以自行靈活調整。

開啟基于TIM3更新事件的DMA配置。傳輸方向是從Memory到外設SPI1,即將內存數據傳輸到SPI1的數據寄存器進行數據發送,這里選用循環模式。

2、對SPI1/SPI2進行基本配置。細節請參看下面三幅截圖。

3、DMA的配置情況。

在TIM3和SPI1/SPI2外設配置中,開啟了相關事件的DMA請求,匯總如下圖。

4、準備用戶代碼。

當完成基于STM32CubeMx的初始化配置并生產初始化代碼后,我們準備相應的用戶代碼。

這里準備了4個內存數組,分別存放SPI1/SPI2的收發數據。

在定時器的觸發下,主SPI1逐字的向從SPI2發送“Hello! I AM STM32!”,從SPI2也逐字的向主SPI1回應“HI,MASTER,ME TOO!”,就這樣循環操作。

下面兩幅圖是本示例中使用到的用戶代碼截圖,是基于STM32Cube固件庫而編寫的。應該說簡單明了,無須多做解釋。

5、結果驗證。

下面的截圖是兩個不同時刻SPI通信時的信號時序波形圖。其中,紫色的是時鐘信號,綠色、黃色是數據信號。兩個數據信號間的間隔由定時器的更新周期決定。

下面的截圖是在調試狀態下的通過觀察窗口得到的SPI1/SPI2分別從對方收到的內容。

最后小結下。整體上講上述應用的實現不難,稍微有點綜合性。

要實現上述應用,首先要求我們對DMA傳輸的原理有清晰的了解,觸發事件,傳輸源、傳輸目標幾個概念及關系要弄清楚。另外,即使我們基于STM32固件庫開發,不一定能找到完完整整的現存代碼,我們可能需要基于現有驅動代碼自行組織用戶程序。還有,在上面示例代碼中,我沒有開啟DMA的中斷事件,我們在具體應用中可以根據情況來決定是否啟用DMA中斷,比方開啟傳輸完成中斷等。順便提醒下,這里我們基于定時器事件自行指定DMA的源端和目的端,?一定要保證是該觸發事件所請求的DMA可以到達的地方,編程設計前最好查看下相關芯片數據手冊里的芯片模塊及總線框架圖。

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

    關注

    456

    文章

    51155

    瀏覽量

    426434
  • STM32
    +關注

    關注

    2271

    文章

    10923

    瀏覽量

    357162
  • 定時器
    +關注

    關注

    23

    文章

    3255

    瀏覽量

    115203

原文標題:STM32定時器觸發SPI逐字收發之應用示例

文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏

    評論

    相關推薦

    如何利用stm32L476內部的3個ADC采集同一時刻的三個輸入的數據?

    哪位大蝦如何利用stm32L476內部的3個ADC采集同一時刻的三個輸入的數據,看過STM32F4有個ADC_TRIPLEMODE_REGSIMULT模式,而STM32L4的只有ADC_DUALMODE_REGSIMULT,或者
    發表于 05-10 06:18

    stm32L476RG RTC的秒中斷如何使用?

    stm32L476RG RTC的秒中斷如何使用
    發表于 04-26 08:24

    stm8l151運行開根號報錯怎么解決?

    ” 。說超出了范圍,有什么辦法可以解決呢?我想開根號的數很大。 我使用stm8l151執行sqrt(4*4);執行沒問題。 我使用stm32l476執行sqrt(4000*4000);沒問題。
    發表于 04-26 08:15

    STM32L476支持高速USB通信嗎?

    我的板子是STM32L476的,現在要做一個usb通信,如果只是做全速USB的話不如直接用串口,所以想做高速USB,這就出現我現在的問題: 1.STM32L476支持高速USB通信嗎? 2.如果支持,應該如何切換 3.PC端如果是WIN10應該使用什么驅動程序
    發表于 04-12 07:52

    STM32L476如何確認停機模式多外部中斷喚醒對應的引腳?

    最近在用STM32L476,做一個中斷喚醒觸發計數的應用,遇到一個問題,如下: 1、初始化為4個外部中斷下降沿喚醒,MCU外部上拉電阻,同時也使能了內部上拉,設置3個變量,在中斷函數內分別對3個變量
    發表于 04-11 06:08

    STM32L476將端口設為模擬輸入后無法進入stop2模式怎么解決?

    參考了STM32L476官方例程 在進入stop2模式前 將所有端口設置為模擬輸入 GPIO_InitTypeDef GPIO_InitStruct
    發表于 04-10 08:09

    stm32l476 QSPI如何退出 Memory_Mapped MODE?

    由于STM32L476的QUADSPI 只支持在內存映射模式下的數據讀取,不支持數據的寫入 因此只能首先通過 HAL默認 的QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE模式
    發表于 04-10 07:12

    STM32L476使用TouchGfx,編譯會爆空間的原因?

    現在工作需要在STM32L476上使用TouchGFX。 現在Flash 內部是1M,RAM是128KB---屏幕分辨率是:800x480, 現在用cubeMX選擇這樣的分辨率,編譯會爆空間。
    發表于 04-09 06:38

    STM32L476 LCD外設SEG管腳奇數周期非活動狀態沒有拉到指定電平是為什么?

    STM32L476 LCD外設SEG管腳奇數周期非活動狀態沒有拉到指定電平
    發表于 04-02 07:06

    STM32L476先用仿真器擦除FLASH后在程序中寫不成功怎么解決?

    STM32L476寫FLASH必須是64位(8字節)寫,也就是double WORD,而且要先把要寫的字節部分擦除掉。 問題來了,先把整片用仿真器擦除掉,程序中先定義一個64位的靜態變量常數
    發表于 03-28 08:44

    stm32l476移植程序后,不執行的原因?怎么解決?

    stm32l476移植程序后,不執行。
    發表于 03-28 08:28

    STM32L476內部RC振蕩器頻偏超大的原因?怎么解決?

    量產幾K臺設備,出現一臺STM32L476內部RC振蕩器頻率低了4.5%的故障板,引發高速串口通訊異常。 讀了RCC_ICSCR寄存器,0x1090 0082,HSI時鐘配置的是16M沒有問題
    發表于 03-28 07:20

    STM32L476系統時鐘72MHz,24分頻后串口波特率為什么不是3M呢?

    STM32L476,使用內部HSI-16M時鐘,串口波特率設置為3Mhz,實際測量出來波特率只有2.86MHz。 看手冊,常溫下內部HSI時鐘頻偏只有正負1%,出來的串口波特率看已經偏了4.67%了,理論上不應該有這么大的偏差吧?是芯片內部壞了嗎?
    發表于 03-28 06:48

    STM32L476 shutdown模式,VCC掉電到1.2V時,RESET管腳被拉低了,為什么?

    STM32L476 shutdown模式,VCC掉電到1.2V時,RESET管腳被拉低了。但是手冊不是說BOR0已經關閉了。怎么還會產生復位。
    發表于 03-21 08:15

    STM32L476利用雙bank的方式進行升級,在flash中設置的一些flag讀不到是什么問題?

    STM32L476利用雙bank的方式進行升級,這個是通過Syscfg_Memrmp中的FB_Mode做的,我試了下,可以快速切換到另外一個bank,但是在flash中設置的一些flag讀不到,是什么問題?
    發表于 03-12 07:43

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品
    主站蜘蛛池模板: 俄罗斯毛片基地 | 美女露出扒开尿口让男人桶 | 亚洲成人黄色网址 | 中文字幕一二三区乱码老 | 视频在线观看免费网站 | 欧美人成绝费网站色www吃脚 | 欧美xxxxxxxxx | 久久综合欧美成人 | 啪啪啦资源站永久 | 在线观看亚洲一区二区 | 9966国产精品视频 | 五月综合色 | 三级黄网站 | 无遮挡一级毛片视频 | 中文字幕第15页 | 2021久久精品免费观看 | 在线精品91青草国产在线观看 | 超级乱淫小黄文小说 | 特黄大片aaaaa毛片 | 日本黄页在线观看 | 天天操狠狠操夜夜操 | 国产在线精品香蕉综合网一区 | 91伊人久久大香线蕉 | 911精品国产91久久久久 | 自拍偷自拍亚洲精品被多人伦好爽 | yy6080亚洲半夜理论一级毛片 | 天天综合久久 | 亚洲 另类色区 欧美日韩 | 亚洲午夜顶级嘿嘿嘿影院 | 天天操天天弄 | 岛国中文字幕 | 免费看一级视频 | 中文字幕有码视频 | 特级毛片永久久免费观看 | 免费高清视频免费观看 | 黄色视屏日本 | 欧美日韩国产成人精品 | 欧美精品国产第一区二区 | 精品手机在线视频 | 美女被草视频 | 天天看天天摸天天操 |