女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

基于APM32F411 DMA_ADC Handler模式分析及解決

Geehy極海半導體 ? 來源:21ic論壇極海半導體專區 ? 2025-06-24 14:30 ? 次閱讀

來源:轉載自21ic論壇極海半導體專區

最近在編寫DMA_ADC例程的過程中出現了一個中斷配置的問題,在ADC采集過程中,結合手冊進行ADC連續轉換模式配置采集,手冊上給出需要進行中斷配置的信息,但是真實情況不需要進行中斷配置也可以進行ADC連續轉換采集,因此,我沒過濾掉ADC采集中開啟中斷配置的信息,開啟了ADC中斷采集,因此這次以APM32F411官方例程中的DMA_ADC例程,復刻了此次出現的問題。

2、基于APM32F411 DMA_ADC例程問題復刻

/*!

* [url=home.php?mod=space&uid=247401]@brief[/url] ADC Init

*

* @param None

*

* @retval None

*/

void ADC_Init(void)

{

GPIO_Config_T gpioConfig;

ADC_Config_T adcConfig;

/* RCM Enable*/

RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_GPIOA);

/* GPIO Configuration */

GPIO_ConfigStructInit(&gpioConfig);

gpioConfig.pin = GPIO_PIN_0;

gpioConfig.mode = GPIO_MODE_AN;

gpioConfig.pupd = GPIO_PUPD_NOPULL;

GPIO_Config(GPIOA, &gpioConfig);

RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_ADC1);

/* ADC Configuration */

ADC_Reset();

ADC_ConfigStructInit(&adcConfig);

/* Set resolution*/

adcConfig.resolution = ADC_RESOLUTION_12BIT;

/* Set dataAlign*/

adcConfig.dataAlign = ADC_DATA_ALIGN_RIGHT;

/* Set scanDir*/

adcConfig.scanConvMode = DISABLE;

/* Set convMode continous*/

adcConfig.continuousConvMode = ENABLE;

/* Set extTrigEdge*/

adcConfig.extTrigEdge = ADC_EXT_TRIG_EDGE_NONE;

/* Set nbrOfConversion*/

ADC_Config(ADC1, &adcConfig);

ADC_ConfigRegularChannel(ADC1, ADC_CHANNEL_0, 1, ADC_SAMPLETIME_112CYCLES);

NVIC_EnableIRQRequest(ADC_IRQn,0x00,0x00);

ADC_EnableInterrupt(ADC1,ADC_INT_EOC);

ADC_EnableDMA(ADC1);

ADC_EnableDMARequest(ADC1);

/* Enable ADC*/

ADC_Enable(ADC1);

ADC_SoftwareStartConv(ADC1);

}

根據上述復刻代碼,在ADC_Init()代碼配置中,使用NVIC申請中斷號,使能中斷,但是在中斷服務函數中,我并沒有進行內容處理。

3、問題定位及疑惑

當出現問題時,因為首先Debug進行單步調試,程序卡死時,出現以下的信息定位:

cf5494d0-4cec-11f0-b715-92fbcf53809c.jpg

當程序出現問題時,我首先定位的信息便是Internal:Mode->Handler,Stack->MSP->0x20000400,同時Debug Faults中,SCB->DFSR寄存器的值為0x00000001。首先,模式由Thread變成Handler,這個變化可以說明當前程序由普通用戶運行的代碼變成了異常程序處理的代碼。其次,看到SCB寄存器的內容,結合內核手冊中的一些信息,如下:

cf5f95d8-4cec-11f0-b715-92fbcf53809c.jpg

DFSR->HALTED寄存器位置為1,從手冊內容表示,CPU被調試器喊停,但被調停是因為什么原因呢?這個需要進一步分析,如下:

cf6e5e88-4cec-11f0-b715-92fbcf53809c.jpg

DFSR寄存器中HALTED寄存器被置位是因為在NVIC中進行了HALT的請求,然后我回顧了以下程序,在ADC初始化中進行了NVIC的請求,因為程序在ADC進行采集時,會一直跳進中斷程序。記錄到這里,我已經對問題進行了確認。因為在ADC配置中開啟了中斷,當中斷開啟后,請求了HALT,并且CPU響應了這次請求對ADC的中斷服務函數進行處理,但我并沒有對ADC的中斷服務函數進行處理與ADC采集為連續配置模式,因此程序一直處在Handler模式與線程模式下的切換。并且結合.s啟動文件可知,如下:

Default_Handler PROC

EXPORT ADC_IRQHandler [WEAK]

當我通過申請使能中斷后,MCU會通過傳入的中斷號,并計算出偏移量,加載到中斷向量表中(這個后面計劃出一個啟動文件分析,到時在細講)。當MCU相應中斷使能時,程序切換至Handler模式時,PC便將這個地址當做入口,跳入中斷服務函數并執行。如下圖形式(僅舉例):

cf7cdd1e-4cec-11f0-b715-92fbcf53809c.jpg

同時,因為我初始的程序并沒有對ADC_Handler模式進行定義處理,同時導致MCU在響應中斷后進不了中斷服務函數,從而一致卡死在匯編語言B.處,類似C語言中的while(1);,從而產生死循環。

注:文章作者在原帖中提供了例程文件,有需要請至原文21ic論壇下載

原文地址:https://bbs.21ic.com/icview-3329454-1-1.html

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

    關注

    99

    文章

    6665

    瀏覽量

    548602
  • 中斷
    +關注

    關注

    5

    文章

    905

    瀏覽量

    42597
  • 函數
    +關注

    關注

    3

    文章

    4375

    瀏覽量

    64458
  • dma
    dma
    +關注

    關注

    3

    文章

    576

    瀏覽量

    102699

原文標題:APM32芯得 EP.57 | 基于APM32F411 DMA_ADC Handler模式分析及解決

文章出處:【微信號:geehysemi,微信公眾號:Geehy極海半導體】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    正式發布 | 極海APM32F411系列高適配型MCU,均衡功耗、性能與成本

    APM32F411系列高性能高適配型MCU,該系列新品基于Arm? Cortex? -M4F內核,采用55nm工藝制程,擁有大容量Flash、SRAM以及豐富的片內外設,具有優秀的方案適用性和可靠性。 ? 該產品可廣泛應用于儀器儀表、工控設備、智能家電、基站電源、網關設備
    發表于 08-08 17:51 ?1039次閱讀
    正式發布 | 極海<b class='flag-5'>APM32F411</b>系列高適配型MCU,均衡功耗、性能與成本

    充能新時代 | 基于APM32F411的EV交流充電樁應用方案

    將推動全球充電樁市場的快速發展,預計該市場年復合增長率可達36.0%,于2030年增長至1410.8億美元規模。 ? ? 面向EV交流充電樁市場需求,極海采用基于Cortex-M4F內核的高適配型APM32F411系列MCU實現應用。該芯片具有高速運算能力,可滿足系統精確
    發表于 05-20 17:24 ?1391次閱讀
    充能新時代 | 基于<b class='flag-5'>APM32F411</b>的EV交流充電樁應用方案

    TinyMaix框架的內存需求超過了APM32F411的可用內存,導致運行失敗,怎么能成功優化?

    TinyMaix框架的內存需求超過了APM32F411的可用內存,導致運行失敗。怎么能成功優化?
    發表于 09-27 09:44

    【極海APM32F030R8 MINI開發板試用體驗】+官方dma接收usart程序軟件

    接【極海APM32F030R8 MINI開發板免費試用】+官方adc程序由于極海APM32F030R8 MINI開發板的外設資源極為豐富,準備使用計算機com口通訊來交流控制及數據信息。安裝
    發表于 12-24 12:34

    ADC—單通道(DMA

    程序簡介 -工程名稱:ADC單通道(DMA) -實驗平臺: 秉火STM32 F429 開發板 -MDK版本:5.16 -ST固件庫版本:1.5.1 【 !】功能簡介: 使用ADC采集電
    發表于 12-13 15:25 ?8次下載
    <b class='flag-5'>ADC</b>—單通道(<b class='flag-5'>DMA</b>)

    STM32F030 ADC DMA亂序問題

    也是放在ADC_DR中的,它也會觸發DMA請求??梢詤⒄?b class='flag-5'>F0的ADC-DMA例程,先做ADC校準、然后再設置
    發表于 06-09 15:18 ?1662次閱讀

    APM32F030C8T6_ADC_ADC初始化出現異常

    APM32F030C8T6_ADC_ADC初始化出現異常
    發表于 11-09 21:03 ?0次下載
    <b class='flag-5'>APM32F030C8T6_ADC_ADC</b>初始化出現異常

    APM32F103XC_TMR_關閉DMA進入睡眠模式出現故障

    APM32F103XC_TMR_關閉DMA進入睡眠模式出現故障
    發表于 11-09 21:03 ?0次下載
    <b class='flag-5'>APM32F</b>103XC_TMR_關閉<b class='flag-5'>DMA</b>進入睡眠<b class='flag-5'>模式</b>出現故障

    AN1083_APM32F4xx_ADC應用筆記

    AN1083_APM32F4xx_ADC應用筆記
    發表于 11-09 21:03 ?3次下載
    AN1083_<b class='flag-5'>APM32F4xx_ADC</b>應用筆記

    APM32F030C8T6_ADC_ADC連續轉換后DMA只傳輸一次

    APM32F030C8T6_ADC_ADC連續轉換后DMA只傳輸一次
    發表于 11-09 21:03 ?6次下載
    <b class='flag-5'>APM32F030C8T6_ADC_ADC</b>連續轉換后<b class='flag-5'>DMA</b>只傳輸一次

    APM32F072CBT6_ADC_DMA采樣不連續

    APM32F072CBT6_ADC_DMA采樣不連續
    發表于 11-09 21:03 ?0次下載
    <b class='flag-5'>APM32F072CBT6_ADC_DMA</b>采樣不連續

    APM32F072RBT6_ADC_經過調壓后的ADC采樣不精確

    APM32F072RBT6_ADC_經過調壓后的ADC采樣不精確
    發表于 11-09 21:04 ?6次下載
    <b class='flag-5'>APM32F072RBT6_ADC</b>_經過調壓后的<b class='flag-5'>ADC</b>采樣不精確

    APM32F030C8T6_ADC_ADC Vref參考電壓數值讀取出錯

    APM32F030C8T6_ADC_ADC Vref參考電壓數值讀取出錯
    發表于 11-09 21:04 ?2次下載
    <b class='flag-5'>APM32F030C8T6_ADC_ADC</b> Vref參考電壓數值讀取出錯

    極海半導體推出APM32F411系列高性能高適配型MCU

    面向能耗與成本敏感的中高端工業應用市場,不僅對芯片性能與功耗有更高要求,復雜的功能需求也考量著芯片的適配性與穩定性。極海為平衡客戶對產品低功耗、高性能與高性價比等綜合需求,正式推出APM32F411
    發表于 08-06 10:32 ?819次閱讀
    極海半導體推出<b class='flag-5'>APM32F411</b>系列高性能高適配型MCU

    APM32F411板的python+pyocd命令行操作

    前段時間學習了一下如何使用pyocd配合APM32F411VCTINY板在命令行下給它進行各種騷操作,在使用一段時間后就想著:pyocd是基于python的,那是不是也可以使用python腳本+pyocd使用起來呢?
    的頭像 發表于 10-18 16:21 ?907次閱讀
    <b class='flag-5'>APM32F411</b>板的python+pyocd命令行操作