tag 标签: stm32l

相关博文
  • 热度 25
    2013-4-20 21:52
    8544 次阅读|
    0 个评论
    BOR功能 是STM32L系列特有的复位和启动电压调整功能。 BOR 关闭时STM32L的供电范围是 1.65 V to 3.6 V, BOR 关闭时STM32L的供电范围是 1.8 V to 3.6 V ,BOR 共有5个级别,依次是 OB_BOR_LEVEL1  /*! BOR Reset threshold levels for 1.7V - 1.8V VDD power supply */  OB_BOR_LEVEL2  /*! BOR Reset threshold levels for 1.9V - 2.0V VDD power supply */ OB_BOR_LEVEL3  /*! BOR Reset threshold levels for 2.3V - 2.4V VDD power supply */ OB_BOR_LEVEL4  /*! BOR Reset threshold levels for 2.55V - 2.65V VDD power supply */ OB_BOR_LEVEL5  /*! BOR Reset threshold levels for 2.8V - 2.9V VDD power supply */   以下是BOR功能演示   /* Get BOR Option Bytes */   BOROptionBytes = FLASH_OB_GetBOR();      #ifdef BOR_MODIFY   if((BOROptionBytes 0x0F) != BOR_LEVEL)    {     /* Unlocks the option bytes block access */     FLASH_OB_Unlock();       /* Clears the FLASH pending flags */     FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR                   | FLASH_FLAG_SIZERR | FLASH_FLAG_OPTVERR);       /* Select the desired V(BOR) Level ---------------------------------------*/     FLASH_OB_BORConfig(BOR_LEVEL);        /* Launch the option byte loading */     FLASH_OB_Launch();     }
  • 热度 20
    2012-4-24 12:00
    3965 次阅读|
    2 个评论
    STM32L开发经验之一   这2天在调试单位的一个电路板,电路板的核心芯片是ST公司的STM32L152,在进行系统时钟源切换时发现一个问题:当选择系统时钟源为外接振荡器HSE时,有时对的,有时错的,尤其是看上去单条调试时都对的情况下,关机重新上电后还是有问题。 具体的程序代码如下: int main(void) {   // 备注:系统复位后,在启动代码中调用了SystemInit()函数后   //       就转入main()函数   //       SyetemInit()在system_stm32l1xx.c中     int i;   RCC_ClocksTypeDef  RCC_Clocks;     SystemInit();                         // 将该函数放到此处,是为了方便调试该函数     // 选择系统时钟源   RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);     RCC_GetClocksFreq(RCC_Clocks);     LED_Init();     for(;;)   {     LED_On();     for(i=0;i100000;i++);     LED_Off();     for(i=0;i100000;i++);   } } 项目中的其它代码都取自ST提供的外设库中的例子。项目经过编译下载到目标板后,运行后可以看到LED在闪烁。 问题是如果没有RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE) 这条语句,LED闪烁频率还是一样的。 为了找到这个问题,将SystemInit()函数放在main()中进行调试。然后在IAR环境下进行单条语句(输入F11)跟踪,发现当执行完RCC_GetClockFreq()函数后,RCC_Clocks中的数值都是8MHZ。但如果是单步跟踪(输入F10),RCC_Clocks中的数值就是2.1MHZ左右。通过读SystemInit()中的代码,怀疑是HSE没有稳定工作就超时了。在system_stm32l1xx.c中的SystemInit()函数中,调用了SetSysClock(),而在SetSysClock()中有一段代码如下:   /* Wait till HSE is ready and if Time out is reached exit */   do   {     HSEStatus = RCC-CR RCC_CR_HSERDY;     StartUpCounter++;   } while((HSEStatus == 0) (StartUpCounter != HSE_STARTUP_TIMEOUT));   这段代码就是等待HSE稳定,直到超时。 在stm32l1xx.h中定义HSE_STARTUP_TIMEOUT的值为0x0500,将该值改成0x0fff后,再重新编译下载,发现可以正常工作了。 也不知是ST提供的这个数值不对,还是实际的板子存在什么问题?总之算做经验吧,写出来供大家参考。           2012-4-24
相关资源