CH573 HAL_SLEEP后 ADC采樣不準(zhǔn)確,一直溢出,把HAL_SLEEP宏取消后ADC就正常
????GPIOA_ModeCfg(GPIO_Pin_13,?GPIO_ModeIN_Floating);
????ADC_ExtSingleChSampInit(SampleFreq_3_2,?ADC_PGA_0);
????RoughCalib_Value?=?ADC_DataCalib_Rough();?
????ADC_ChannelCfg(ADC_CHANNEL);

ADC設(shè)置如上所示,在全局定義了HAL_SLEEP的宏以后,ADC只有前幾次是對(duì)的,隨后開(kāi)始不正常,一直處于接近溢出的狀態(tài)(好像是4070+左右),無(wú)論adc引腳電壓怎么變,把HAL_SLEPP的宏取消后,一切正常,前幾次和后續(xù)測(cè)量一直都很正常,電壓測(cè)量范圍為鋰電池電壓的3.5~4.2v經(jīng)過(guò)10k+10k的分電阻,即3.5/2v~4.2/2v,請(qǐng)問(wèn)這是什么情況呢?謝謝?。∪绻麉s有此情況,那么使用ADC時(shí)是否無(wú)法使用HAL_SLEEP了?

您好,ADC與休眠的使用注意以下幾點(diǎn):

①為了減少休眠期間的IO漏電,ADC采值引腳在休眠前建議配置為上/下拉輸入以固定電平,在喚醒后重新配置為浮空輸入。

②sleep喚醒后,需要重新初始化ADC,重點(diǎn)關(guān)注CHANNEL選擇的配置。

③外圍電路是否有大電容,若有,①中休眠前的上拉會(huì)給電容充電;休眠喚醒后先等待電容放電,過(guò)一段時(shí)間再采集ADC。


好的,我先按您方法檢測(cè)試試先,謝謝


按照二樓方法在MounRiver全局宏定義HAL_SLEEP后,ADC可以正常測(cè)量了!該問(wèn)題已解決,謝謝??!
但是部分的hal層的任務(wù)不正常,請(qǐng)問(wèn)一下宏定義HAL_SLEEP后,其他外設(shè)需要注意什么事項(xiàng)嗎?如spi,串口或者h(yuǎn)al層的一些任務(wù)設(shè)定等,目前hal層有個(gè)串口解析數(shù)據(jù)的任務(wù)(串口接收使用串口的中斷),該任務(wù)為50ms周期,但是打開(kāi)HAL_SLEEP后,該任務(wù)不正常了,具體未測(cè)試原因,但鑒于使用HAL_SLEEP前一切正常的情況,想咨詢(xún)下使用HAL_SLEEP的相關(guān)注意事項(xiàng),謝謝?。?/p>


注意sleep休眠期間,MCU的32M晶振是停止振動(dòng)的,MCU也就沒(méi)了主頻。“串口解析數(shù)據(jù)的任務(wù)(串口接收使用串口的中斷)”串口接收是要跑主頻的,休眠期間收不到。

sleep休眠+串口接收的解決方案:

①能接受串口發(fā)給MCU的第一包丟包,一段時(shí)間后(喚醒后等待主頻穩(wěn)定需要約1.5ms)用第二包通信,那么可以將MCU的RX引腳,配置為GPIO喚醒的引腳,第一包用來(lái)喚醒MCU,第二包用來(lái)交互數(shù)據(jù)。CH582芯片Sleep模式串口喚醒接收數(shù)據(jù) - SweetTea_lllpc - 博客園 (cnblogs.com)

②MCU有多余的IO可以單獨(dú)用作喚醒,那么在串口數(shù)據(jù)發(fā)送前先拉IO喚醒MCU,再發(fā)串口包通信。也是需要注意主頻穩(wěn)定需要數(shù)個(gè)ms。

也可以上位機(jī)和MCU之間約定好通信格式,一收一發(fā)。上位機(jī)需要發(fā)包時(shí),不斷查詢(xún)MCU是否已經(jīng)喚醒;MCU每隔50ms就等待比如說(shuō)5ms來(lái)判斷上位機(jī)是否下發(fā)數(shù)據(jù),收到數(shù)據(jù)就給上位機(jī)回包。總之,MCU需要處于喚醒后的狀態(tài)才可以收到串口數(shù)據(jù)。


明白了!!謝謝您??!那也就是說(shuō)HAL_SLEEP休眠期間,系統(tǒng)滴答定時(shí)器也是無(wú)法正常工作的,如果有需要一直得到系統(tǒng)時(shí)間差用作微積分運(yùn)算,那應(yīng)該就不能使用HAL_SLEEP了吧?如果是不行的話(huà),能否使用tmos開(kāi)一個(gè)event專(zhuān)門(mén)做毫秒累加代替系統(tǒng)滴答定時(shí)器,這樣是否可行呢?


是的,sleep休眠期間主頻停止了,滴答定時(shí)器也不會(huì)工作。

看您需要什么樣的功能,總的來(lái)講如果sleep休眠期間也要保持計(jì)數(shù),那么一定要用32K時(shí)鐘來(lái)計(jì)數(shù)。

TMOS系統(tǒng)本身就可以視作一個(gè)定時(shí)器,調(diào)用tmos_start_task接口安排延遲執(zhí)行事件,會(huì)有一個(gè)0.625ms為單位的時(shí)鐘,用它來(lái)安排什么時(shí)候喚醒以執(zhí)行事件,系統(tǒng)時(shí)間差可以在喚醒后調(diào)用RTC_GetCycle32k接口獲取當(dāng)前RTC計(jì)數(shù)后與上次結(jié)果作差(計(jì)滿(mǎn)一天會(huì)清零重新計(jì)數(shù));如果每隔0.625ms都要喚醒一次,那太頻繁了,TMOS系統(tǒng)安排不了休眠。


RTC在sleep休眠期間會(huì)正常計(jì)數(shù)嗎?


請(qǐng)問(wèn)一下如果有1ms間隔的任務(wù),還有必要開(kāi)啟HAL_SLEEP嗎,感覺(jué)也是挺頻繁的


RTC在休眠期間也是一直跑的。

1ms一次太頻繁了,沒(méi)必要開(kāi)休眠,實(shí)際上也睡不下去。sleep.c里的CH57X_LowPower函數(shù)中,會(huì)判斷下一次TMOS事件執(zhí)行的時(shí)間點(diǎn),與當(dāng)前RTC事件的差值,是否小于1ms,若小于1ms是直接return,不會(huì)繼續(xù)跑休眠的。

image.png


好的,明白了?。?!謝謝!


您好,想再咨詢(xún)下sleep休眠期間與看門(mén)狗的關(guān)系,例如:sleep休眠時(shí)間大于喂狗時(shí)間,看門(mén)狗如果使用看門(mén)狗溢出中斷喂狗,是否會(huì)正常喂狗呢?


另外想咨詢(xún)下tmos任務(wù)間自動(dòng)sleep和自動(dòng)喚醒,這個(gè)過(guò)程是通過(guò)rtc喚醒來(lái)實(shí)現(xiàn)的嗎?根據(jù)下一個(gè)任務(wù)的時(shí)間間隔來(lái)設(shè)置對(duì)應(yīng)的rtc觸發(fā)時(shí)間以此來(lái)喚醒系統(tǒng)運(yùn)行tmos任務(wù),是這樣嗎?謝謝!


請(qǐng)問(wèn)一下使用內(nèi)部rtc,并且校準(zhǔn)后,時(shí)間單位是按照頻率32768還是32000去計(jì)算呢?我看手冊(cè)上好像說(shuō)是校準(zhǔn)到32khz 但是rtc寄存器上寫(xiě)的是以32768為基準(zhǔn),對(duì)此有點(diǎn)疑惑,謝謝了?。。。。?!


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频