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

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

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

3天內不再提示

STM32U59 SPI DMA發送未產生傳輸完成中斷問題分析

STM32單片機 ? 來源:STM32單片機 ? 作者:STM32單片機 ? 2022-09-01 12:11 ? 次閱讀

1、前言

某客戶發現修改代碼后,STM32U59 SPI DMA 發送未產生傳輸完成中斷,但修改的代碼跟 SPI 以及 DMA 毫無關聯。

2、調研

回退代碼修改后問題消失,可以確認硬件正常。檢查 SPI 發送對應的 DMA 句柄的ErrorCode,發現 HAL_DMA_ERROR_DTE(Date Transfer Error)置位。嘗試修改軟件,發現調整下某個全局變量初值,或屏蔽某些變量,都能解決問題。

為屏蔽 RTOS 及應用代碼可能帶來的影響,調整客戶 SPI 和 DMA 初始化代碼位置到緊跟 MCU 復位后配置時鐘,初始化全局變量,并在初始化完成后立即發送一包數據,測試下來問題仍存在,說明問題和后續 RTOS 及應用代碼代碼無關。

為澄清全局變量初始化對 SPI 和 DMA 的影響,在全局變量初始化完成、初始化 SPI和 DMA 前、后,分別檢查 RCC、SPI 和 DMA 寄存器,和正常時對比無差異。

3、分析

客戶使用的是 GPDMA 的 Linked List 模式,此模式下 DMA 傳輸相關的 8 個寄存器不通過軟件直接設置,而是需要軟件把待設定的寄存器參數先放入緩沖區,再將緩沖區地址賦到 DMA 寄存器 CxLBAR(高 16 位)和 CxLLR(低 16 位),使能 DMA 時硬件自動將這些參數加載到 DMA 通道對應的寄存器中。

跟蹤代碼執行,在 DMA 使能前,查看參數緩沖區(地址:0x2001 FFF0)。確認DMA 參數緩沖區中源地址寄存器參數 0x200 e0618、目標地址寄存器參數 0x4001 3020都是正確的;使能 DMA 后,發現 DMA CxDAR 寄存器數據異常 0x1382 932e。

3d67c0b0-292c-11ed-ba43-dac502259ad0.png

3d8d5064-292c-11ed-ba43-dac502259ad0.png

查閱參考手冊,找到其對對緩沖區限制的描述:必須 4 字節對齊,且不能跨 64Kbyte邊界;而用戶的緩沖區地址 0x2001 FFF0(32 字節)剛好跨了 64Kbyte 邊界。鏈接器分配的地址范圍是 0x2001 FFF0 ~ 0x2002 0010,而 GPDMA 實際訪問的數據區間是0x2001 FFF0 ~ 0x2001 FFFF 和 0x20010000 ~ 0x2001000F,把 2001 0000 對應的數據加載到了 DAR 中,隨即引發了 DTE 錯誤。

3daecd7a-292c-11ed-ba43-dac502259ad0.png

4、處理

處由于增減全局變量、修改變量初值為零或非零,都會影響最終鏈接結果,故通過設置預編譯選項對所有 DMA 鏈表數據結構變量的地址作出限制,來滿足 4 字節對齊且不跨64K Byte 邊界這個約束條件,再次編譯鏈接后進行測試,SPI DMA 功能恢復正常。

5、小結

對這種看似怪異的問題,需要仔細觀察并記錄整個數據傳輸過程,各個關鍵操作前后相關寄存器的變化來獲取第一手資料,對比正常情況并結合參考手冊尋找具體原因。

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

    關注

    146

    文章

    17148

    瀏覽量

    351186
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1706

    瀏覽量

    91578
  • 中斷
    +關注

    關注

    5

    文章

    898

    瀏覽量

    41495
  • dma
    dma
    +關注

    關注

    3

    文章

    561

    瀏覽量

    100584

原文標題:工程師筆記|DMA 不產生傳輸完成中斷

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    使用dma的方式來傳輸定時器輸入捕獲的數據,是不是每隔100ms會觸發dma傳輸完成中斷?

    目前使用dma的方式來傳輸定時器輸入捕獲的數據,內存數據大小為2,使用normal模式,100ms打開dma模式,請問,這種情況下,是不是每隔100ms會觸發dma
    發表于 04-18 07:47

    STM32H743 DMA接收固定長度數據后,并未立即進入DMA傳輸完成中斷,為什么?

    743 單工只接收SPI做從接收AD7768非標準SPI口數據時發現,DMA接收固定長度數據后,并未立即進入DMA傳輸完成
    發表于 05-30 08:21

    STM32SPIDMA傳輸問題

    我在做一個實驗,兩片STM32的單片機:其中一個做為SPI主機,只接收,另一個為SPI從機,只發送。兩個都為DMA
    發表于 02-10 10:49

    STM32 SPIDMA傳輸多出16個時鐘

    stm32f103開啟SPIDMA傳輸SPI時鐘4.5M,DMA按1B
    發表于 10-11 08:59

    STM32F4 DMA傳輸完成中斷觸發條件

    中斷產生有詳細描述,如下圖。根據圖知道傳輸完成中斷的發生條件:1.DMA_SxBDTR計數器達到零(正常使用時用的就是這個)2.
    發表于 07-01 08:50

    HAL庫SPI DMA的使用問題

    *pTxData, uint8_t *pRxData, uint16_t Size);此函數內需要對spi的狀態量進行判斷是否為ready,然后再將狀態量變成busy,函數內使能了DMA的TC(傳輸完成
    發表于 04-01 11:47

    DMA傳輸完成中斷用來配置ADM2483的管腳

    用的外設是PA9 PA10DMA選擇的是DMA2_Channel6代碼中還用了DMA傳輸完成中斷,用來配置ADM2483的管腳。直接上代碼了
    發表于 08-16 07:00

    STM32 SPI驅動增加信號量進行傳輸完成通知哪位兄弟做過這樣的嘗試嗎

    當前的 STM32 SPI 驅動里,傳輸完數據后,會使用 while 進行等待傳輸完我修改了一下,給 SPI 增加了一個信號量。使用
    發表于 11-17 10:17

    STM32F407使用系統庫函數DMA_GetITStatus獲取中斷狀態的問題

    程序使用DMA傳輸,需要使用DMA傳輸完成中斷,程序如下:void DMA2_Stream7_I
    發表于 12-04 17:21 ?7次下載
    <b class='flag-5'>STM32</b>F407使用系統庫函數<b class='flag-5'>DMA</b>_GetITStatus獲取<b class='flag-5'>中斷</b>狀態的問題

    stm32f103使用dma和fpga進行spi通信

    stm32作為從機,fpga作為主機。進行spi通信。stm32使用dma進行數據接收。在dma中斷
    發表于 12-22 19:29 ?95次下載
    <b class='flag-5'>stm32</b>f103使用<b class='flag-5'>dma</b>和fpga進行<b class='flag-5'>spi</b>通信

    STM32L431 寄存器配置 USART+DMA發送+中斷接收

    用的外設是PA9 PA10DMA選擇的是DMA2_Channel6代碼中還用了DMA傳輸完成中斷,用來配置ADM2483的管腳。直接上代碼了
    發表于 12-24 19:09 ?17次下載
    <b class='flag-5'>STM32</b>L431 寄存器配置 USART+<b class='flag-5'>DMA</b><b class='flag-5'>發送</b>+<b class='flag-5'>中斷</b>接收

    DMA中斷的內存到內存傳輸

    .c:處理中斷信息。 DMA_XferCpltCallback:數據正確傳輸完成回調函數。 DMA_XferErrorC
    發表于 03-23 15:23 ?3158次閱讀
    <b class='flag-5'>DMA</b>帶<b class='flag-5'>中斷</b>的內存到內存<b class='flag-5'>傳輸</b>

    DMA產生傳輸完成中斷

    DMA產生傳輸完成中斷
    的頭像 發表于 10-18 16:44 ?1358次閱讀
    <b class='flag-5'>DMA</b>不<b class='flag-5'>產生</b><b class='flag-5'>傳輸完成</b><b class='flag-5'>中斷</b>

    stm32 HAL庫spi接收的同時為什么有數據發送出去?

    stm32 HAL庫spi接收的同時為什么有數據發送出去? 在STM32 HAL庫中,SPI接口的數據收發是通過
    的頭像 發表于 10-26 17:42 ?1881次閱讀

    STM32 DMA傳輸的問題分析

    用戶使用STM32G473RET6芯片,開發環境STM32CubeMX+Keil(LL庫)。使用DMA1通道1,在半傳輸中斷和完全
    的頭像 發表于 12-01 09:19 ?2957次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>DMA</b><b class='flag-5'>傳輸</b>的問題<b class='flag-5'>分析</b>
    主站蜘蛛池模板: 4438成人成人高清视频| 免费看男女做好爽好硬视频| 在线视频这里只有精品| 欧美一级欧美三级| 天天舔天天射天天干| ssswww日本免费网站片| 四虎影院成人| 成年网站在线观看| 日韩dv| 婷婷丁香花| 99免费观看视频| 欧美一级免费观看| 午夜在线观看视频在线播放版| 欧美三级网站| 色噜噜噜噜噜| 天天宗合网| 饥渴少妇videos| 精品一区视频| tube44在线观看| 日本在线一区二区| 欧美黄色片一级| 男人午夜禁片在线观看| 最新国产在线播放| 国产一区二区三区毛片| 成人免费一区二区三区| 天天狠狠弄夜夜狠狠躁·太爽了| 国产jzjzjz免费大全视频| 欧美激情在线| 欧美日韩一区二区三区视频在线观看| 天天干天天操天天透| 国产h视频在线观看高清| 日韩图区| 欧美1024性视频| 午夜肉伦伦影院| 夜夜操美女| 字幕网中文aⅴ资源站| 国产毛片久久久久久国产毛片| 免费在线公开视频| 免费国产网站| 在线国产播放| 国产免费久久|