一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

Geehy極海半導(dǎo)體 ? 來(lái)源:21ic論壇極海半導(dǎo)體專(zhuān)區(qū) ? 2025-06-24 14:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

來(lái)源:轉(zhuǎn)載自21ic論壇極海半導(dǎo)體專(zhuān)區(qū)

最近在編寫(xiě)DMA_ADC例程的過(guò)程中出現(xiàn)了一個(gè)中斷配置的問(wèn)題,在ADC采集過(guò)程中,結(jié)合手冊(cè)進(jìn)行ADC連續(xù)轉(zhuǎn)換模式配置采集,手冊(cè)上給出需要進(jìn)行中斷配置的信息,但是真實(shí)情況不需要進(jìn)行中斷配置也可以進(jìn)行ADC連續(xù)轉(zhuǎn)換采集,因此,我沒(méi)過(guò)濾掉ADC采集中開(kāi)啟中斷配置的信息,開(kāi)啟了ADC中斷采集,因此這次以APM32F411官方例程中的DMA_ADC例程,復(fù)刻了此次出現(xiàn)的問(wèn)題。

2、基于APM32F411 DMA_ADC例程問(wèn)題復(fù)刻

/*!

* [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);

}

根據(jù)上述復(fù)刻代碼,在ADC_Init()代碼配置中,使用NVIC申請(qǐng)中斷號(hào),使能中斷,但是在中斷服務(wù)函數(shù)中,我并沒(méi)有進(jìn)行內(nèi)容處理。

3、問(wèn)題定位及疑惑

當(dāng)出現(xiàn)問(wèn)題時(shí),因?yàn)槭紫菵ebug進(jìn)行單步調(diào)試,程序卡死時(shí),出現(xiàn)以下的信息定位:

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

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

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

DFSR->HALTED寄存器位置為1,從手冊(cè)內(nèi)容表示,CPU被調(diào)試器喊停,但被調(diào)停是因?yàn)槭裁丛蚰??這個(gè)需要進(jìn)一步分析,如下:

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

DFSR寄存器中HALTED寄存器被置位是因?yàn)樵贜VIC中進(jìn)行了HALT的請(qǐng)求,然后我回顧了以下程序,在ADC初始化中進(jìn)行了NVIC的請(qǐng)求,因?yàn)槌绦蛟贏DC進(jìn)行采集時(shí),會(huì)一直跳進(jìn)中斷程序。記錄到這里,我已經(jīng)對(duì)問(wèn)題進(jìn)行了確認(rèn)。因?yàn)樵贏DC配置中開(kāi)啟了中斷,當(dāng)中斷開(kāi)啟后,請(qǐng)求了HALT,并且CPU響應(yīng)了這次請(qǐng)求對(duì)ADC的中斷服務(wù)函數(shù)進(jìn)行處理,但我并沒(méi)有對(duì)ADC的中斷服務(wù)函數(shù)進(jìn)行處理與ADC采集為連續(xù)配置模式,因此程序一直處在Handler模式與線程模式下的切換。并且結(jié)合.s啟動(dòng)文件可知,如下:

Default_Handler PROC

EXPORT ADC_IRQHandler [WEAK]

當(dāng)我通過(guò)申請(qǐng)使能中斷后,MCU會(huì)通過(guò)傳入的中斷號(hào),并計(jì)算出偏移量,加載到中斷向量表中(這個(gè)后面計(jì)劃出一個(gè)啟動(dòng)文件分析,到時(shí)在細(xì)講)。當(dāng)MCU相應(yīng)中斷使能時(shí),程序切換至Handler模式時(shí),PC便將這個(gè)地址當(dāng)做入口,跳入中斷服務(wù)函數(shù)并執(zhí)行。如下圖形式(僅舉例):

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

同時(shí),因?yàn)槲页跏嫉某绦虿](méi)有對(duì)ADC_Handler模式進(jìn)行定義處理,同時(shí)導(dǎo)致MCU在響應(yīng)中斷后進(jìn)不了中斷服務(wù)函數(shù),從而一致卡死在匯編語(yǔ)言B.處,類(lèi)似C語(yǔ)言中的while(1);,從而產(chǎn)生死循環(huán)。

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • adc
    adc
    +關(guān)注

    關(guān)注

    99

    文章

    6671

    瀏覽量

    548686
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    905

    瀏覽量

    42623
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4376

    瀏覽量

    64530
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    576

    瀏覽量

    102862

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

文章出處:【微信號(hào):geehysemi,微信公眾號(hào):Geehy極海半導(dǎo)體】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

    充能新時(shí)代 | 基于APM32F411的EV交流充電樁應(yīng)用方案

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

    TinyMaix框架的內(nèi)存需求超過(guò)了APM32F411的可用內(nèi)存,導(dǎo)致運(yùn)行失敗,怎么能成功優(yōu)化?

    TinyMaix框架的內(nèi)存需求超過(guò)了APM32F411的可用內(nèi)存,導(dǎo)致運(yùn)行失敗。怎么能成功優(yōu)化?
    發(fā)表于 09-27 09:44

    【極海APM32F030R8 MINI開(kāi)發(fā)板試用體驗(yàn)】+官方dma接收usart程序軟件

    接【極海APM32F030R8 MINI開(kāi)發(fā)板免費(fèi)試用】+官方adc程序由于極海APM32F030R8 MINI開(kāi)發(fā)板的外設(shè)資源極為豐富,準(zhǔn)備使用計(jì)算機(jī)com口通訊來(lái)交流控制及數(shù)據(jù)信息。安裝
    發(fā)表于 12-24 12:34

    ADC—單通道(DMA

    程序簡(jiǎn)介 -工程名稱(chēng):ADC單通道(DMA) -實(shí)驗(yàn)平臺(tái): 秉火STM32 F429 開(kāi)發(fā)板 -MDK版本:5.16 -ST固件庫(kù)版本:1.5.1 【 !】功能簡(jiǎn)介: 使用ADC采集電
    發(fā)表于 12-13 15:25 ?8次下載
    <b class='flag-5'>ADC</b>—單通道(<b class='flag-5'>DMA</b>)

    STM32F030 ADC DMA亂序問(wèn)題

    也是放在ADC_DR中的,它也會(huì)觸發(fā)DMA請(qǐng)求??梢詤⒄?b class='flag-5'>F0的ADC-DMA例程,先做ADC校準(zhǔn)、然后再設(shè)置
    發(fā)表于 06-09 15:18 ?1665次閱讀

    APM32F030C8T6_ADC_ADC初始化出現(xiàn)異常

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

    APM32F103XC_TMR_關(guān)閉DMA進(jìn)入睡眠模式出現(xiàn)故障

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

    AN1083_APM32F4xx_ADC應(yīng)用筆記

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

    APM32F030C8T6_ADC_ADC連續(xù)轉(zhuǎn)換后DMA只傳輸一次

    APM32F030C8T6_ADC_ADC連續(xù)轉(zhuǎn)換后DMA只傳輸一次
    發(fā)表于 11-09 21:03 ?6次下載
    <b class='flag-5'>APM32F030C8T6_ADC_ADC</b>連續(xù)轉(zhuǎn)換后<b class='flag-5'>DMA</b>只傳輸一次

    APM32F072CBT6_ADC_DMA采樣不連續(xù)

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

    APM32F072RBT6_ADC_經(jīng)過(guò)調(diào)壓后的ADC采樣不精確

    APM32F072RBT6_ADC_經(jīng)過(guò)調(diào)壓后的ADC采樣不精確
    發(fā)表于 11-09 21:04 ?6次下載
    <b class='flag-5'>APM32F072RBT6_ADC</b>_經(jīng)過(guò)調(diào)壓后的<b class='flag-5'>ADC</b>采樣不精確

    APM32F030C8T6_ADC_ADC Vref參考電壓數(shù)值讀取出錯(cuò)

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

    極海半導(dǎo)體推出APM32F411系列高性能高適配型MCU

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

    APM32F411板的python+pyocd命令行操作

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