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)时,才会产生中断。

 

 

 

 

 

 

 

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