STM32 L051 開發問題集合

STM32L051K8T6    

一、使用官方的HAL庫作串口驅動,與之前的驅動庫不一樣,使用的是串口中斷接收不定長數據,然後通過DMA發送出來;在調試過程中出現的問題是 串口中斷接收數據,出現丟失字符現象,經過配置串口的中斷優先級與DMA中斷的優先級得到問題的解決。以下是程序代碼例程鏈接

https://download.csdn.net/download/huan447882949/10938427

 

二、使用PA1入口採集ADC,使用DMA+ADC裝換,再配置STM32CubMX過程中出現配置問題:

標題

 

三、RTC可以採用兩個時鐘模塊,1個是外部的低頻晶振,一般我們選擇32.768KHz,這個比較精準;另一個則是內部的RC振盪器,是37KHz。

    STM32L0的預分頻器被分成兩個預分頻器。一個7位的異步預分頻器(AsynchPrediv),一個13位同步預分頻器(SynchPrediv)。

    RTC頻率的計算公式:RTCclk=(LSE或LSI)/[(AsynchPrediv+1)*(SynchPrediv+1)]。

    給出2組經典值:    LSE    RTCclk = 32768/(127+1)*(255+1)=1Hz    AsynchPrediv = 127    SynchPrediv = 255

                       LSI     RTCclk = 37000/(124+1)*(295+1)=1Hz    AsynchPrediv = 124    SynchPrediv = 295

 

3-1 
STM32F030用LSI作時鐘源走時不準,40Khz配置,總會跳秒,要想準時,還是用外部LSE時鐘,32768hz,會比較準。 
3-2 sAlarm.AlarmMask =RTC_ALARMMASK_DATEWEEKDAY|RTC_ALARMMASK_HOURS |RTC_ALARMMASK_MINUTES ;

//注意屏蔽的對象,設置的日期,星期,時分是無效的,這時RTC鬧鐘 的秒匹配後觸發鬧鐘中斷。如果設置RTC_AlarmMask=RTC_AlarmMask_None;則爲精確匹配,即鬧鐘不僅要求時分秒匹配還要匹配日期和星期,都匹配後觸發鬧鐘中斷)

         起初因爲沒有注意到這一點,我設置10s 鬧鐘中斷,當時只做了RTC_ALARMMASK_DATEWEEKDAY屏蔽 ,以至於耗費了好幾天而不得結果。
1
3-3 測試低功耗時,最好通過任務,或者條件控制進入低功耗,否則,開機幾秒就進入,那麼下來,再燒寫程序就麻煩了。

四、PVD 是一種檢測MCU供電情況的技術。當供電電壓高於或者低於一定閾值的時候,可以在寄存器上體現出來,或者直接產生硬件中斷。
在實際使用MCU時,特別是電池供電的方案中,往往會遇到供電不夠導致MCU或者外設工作不正常的情況。PVD在這個時候就可以派上用場了。

PWR_PVDLevelConfig(PWR_PVDLevel_0);//可選
PWR_PVDCmd(ENABLE);//使能電壓檢測

其中PVD output的結果可以再在存器中查看到

if(PWR_GetFlagStatus(PWR_FLAG_PVDO)!=RESET)
{
    //VDD電壓低於閾值電壓
}
else
{
    //VDD電壓高於閾值電壓
}

關於PVD的閾值的設定共有兩種方式:

  • 固定閾值(1.9V 2.1V 2.3V 2.5V 2.7V 2.9V 3.1V)
  • 與引腳比較(PB7)

在實際使用的過程中,PVD可以用查詢中斷的方式來工作。

注意:當使用PVD功能檢測低電壓時,VDD電壓剛剛小於閾值時並不會直接產生PVD中斷,只有當VDD電壓小於(閾值-50MV)時,纔會產生中斷。

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章