你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

各位大神帮帮忙, STM32L151修改MSI频率程序跑飞

[复制链接]
zzzzzx 提问时间:2018-7-25 10:30 /
本帖最后由 zzzzzx 于 2018-7-25 10:57 编辑

各位大神帮帮忙!!!

想让芯片运行在low power run 模式,修改MSI频率为range 1,仿真时程序直接飞掉了,烧录程序直接运行出现Internel command error

程序代码:
    RCC->CR |= ((uint32_t)RCC_CR_MSION);
  if ((RCC->CR & RCC_CR_MSIRDY) != RESET)
  {
    MSIStatus = (uint32_t)0x01;
  }
  else
  {
    MSIStatus = (uint32_t)0x00;
  }
   if (MSIStatus == (uint32_t)0x01)
   {
    /* Flash 0 wait state */
    FLASH->ACR &= ~FLASH_ACR_LATENCY;
   
//    /* Disable Prefetch Buffer */
    FLASH->ACR &= ~FLASH_ACR_PRFTEN;

//    /* Disable 64-bit access */
    FLASH->ACR &= ~FLASH_ACR_ACC64;
   
    /* Power enable */
//   RCC->APB1ENR |= RCC_APB1ENR_PWREN;
  
    /* Select the Voltage Range 2 (1.5 V) */
   PWR->CR = PWR_CR_VOS_1;
  
    /* Wait Until the Voltage Regulator is ready */
    while((PWR->CSR & PWR_CSR_VOSF) != RESET)
   {
   }
    /* HCLK = SYSCLK /1*/
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;

    /* PCLK2 = HCLK /1*/
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
   
    /* PCLK1 = HCLK /1*/
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1;

   RCC->ICSCR &= (uint32_t)((uint32_t)~(RCC_ICSCR_MSIRANGE));
   RCC->ICSCR |= (uint32_t)RCC_ICSCR_MSIRANGE_1;   


    while((RCC->CR & RCC_CR_MSIRDY) == RESET)
            ;
    /* Select MSI as system clock source */
        RCC_SYSCLKConfig(RCC_SYSCLKSource_MSI);

    /* Wait till MSI is used as system clock source */
    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_MSI)
    {
            
    }
程序直接烧录运行出现的Internel command error



MSI设置为RANGE 3即以上时,程序就能正常运行



PROJECT.rar

下载

1.81 MB, 下载次数: 28, 下载积分: ST金币 -1

收藏 评论19 发布时间:2018-7-25 10:30

举报

19个回答
废鱼 回答时间:2018-7-25 14:03:45
我不是修改system_stm32l1xx.c,我是单独写的配置函数。进入main后调用。
void RCC_Config(void)
{
        RCC_ClocksTypeDef RCC_Clocks;
        RCC_DeInit();
       
        RCC_MSIRangeConfig(RCC_MSIRange_6);
        RCC_AdjustMSICalibrationValue(0);
        RCC_MSICmd(ENABLE);

        RCC_SYSCLKConfig(RCC_SYSCLKSource_MSI);

        RCC_HCLKConfig(RCC_SYSCLK_Div1);
        RCC_PCLK1Config(RCC_HCLK_Div1);
       
        RCC_PCLK2Config(RCC_HCLK_Div1);
        RCC_GetClocksFreq(&RCC_Clocks);
       
        SysTick_Config(RCC_Clocks.SYSCLK_Frequency / 1000);
}

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

zzzzzx 回答时间:2018-7-25 11:42:45
安 发表于 2018-7-25 11:18
我看了一下代码,我猜测是波特率太高了吧,你把串口波特率往小调一下。调到4800或者9600试试。我当时测试不 ...

不是串口波特率的问题,在设置系统时钟修改MSI的频率,调试时一运行到RCC_SYSCLKConfig(RCC_SYSCLKSource_MSI);这条语句就飞掉了,设置为range 3以上就没有问题,是不是降低频率还有其他地方需要注意的。
zzzzzx 回答时间:2018-7-26 14:39:09
butterflyspring 发表于 2018-7-25 14:20
你的主频大于了131kHz,你可以测试一下,小于131时,range1应该没有问题..

系统复位就是MSI 2.097Mhz的主频,如果修改AHB的分配,使CPU时钟低于131,程序也会飞掉。但从2M切换到524是可以的,感觉要让系统工作在低频还需要其他配置,我使用标准库里的low power rum例程也是同样要跑飞。
废鱼 回答时间:2018-7-25 10:32:29
楼主方便把工程传上来吗?我用的时候,RANGE 3以下发现串口波特率会出现问题。楼主是否还使用其他的外设资源呢?

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

zzzzzx 回答时间:2018-7-25 10:58:20
安 发表于 2018-7-25 10:32
楼主方便把工程传上来吗?我用的时候,RANGE 3以下发现串口波特率会出现问题。楼主是否还使用其他的外设资 ...

已上传附件了,你的程序修改到range 1可以运行吗
废鱼 回答时间:2018-7-25 11:18:04
我看了一下代码,我猜测是波特率太高了吧,你把串口波特率往小调一下。调到4800或者9600试试。我当时测试不光影响这个,ADC都无法工作,还是放弃使用了。
butterflyspring 回答时间:2018-7-25 11:59:27
你的主频是?
zzzzzx 回答时间:2018-7-25 12:05:02

我希望使用MSI做系统时钟,运行在131.072 KHz 上
butterflyspring 回答时间:2018-7-25 14:20:06
你的主频大于了131kHz,你可以测试一下,小于131时,range1应该没有问题..
Capture.JPG

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

zzzzzx 回答时间:2018-7-26 15:10:47
安 发表于 2018-7-25 14:03
我不是修改system_stm32l1xx.c,我是单独写的配置函数。进入main后调用。
void RCC_Config(void)
{

你将range6改为range1能不能正常运行啊
废鱼 回答时间:2018-7-26 15:47:56
我试过是可以的,但是波特率就不对了。
zzzzzx 回答时间:2018-7-26 16:03:34
安 发表于 2018-7-26 15:47
我试过是可以的,但是波特率就不对了。

我试了你的代码,不知道为什么我的就不行,感谢你的帮助!!!
我再想想是哪里的问题。
zzzzzx 回答时间:2018-7-26 16:04:13
安 发表于 2018-7-26 15:47
我试过是可以的,但是波特率就不对了。

不知能否将你的工程发给我,我试下。
废鱼 回答时间:2018-7-26 16:19:36
zzzzzx 发表于 2018-7-26 16:04
不知能否将你的工程发给我,我试下。

不好意思,工程发不了。
12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版