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

各位大神帮帮忙, 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, 下载次数: 26, 下载积分: ST金币 -1

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

举报

19个回答
回答时间: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都无法工作,还是放弃使用了。
zzzzzx 回答时间:2018-7-25 11:42:45
安 发表于 2018-7-25 11:18
我看了一下代码,我猜测是波特率太高了吧,你把串口波特率往小调一下。调到4800或者9600试试。我当时测试不 ...

不是串口波特率的问题,在设置系统时钟修改MSI的频率,调试时一运行到RCC_SYSCLKConfig(RCC_SYSCLKSource_MSI);这条语句就飞掉了,设置为range 3以上就没有问题,是不是降低频率还有其他地方需要注意的。
butterflyspring 回答时间:2018-7-25 11:59:27
你的主频是?
zzzzzx 回答时间:2018-7-25 12:05:02

我希望使用MSI做系统时钟,运行在131.072 KHz 上
回答时间: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

查看全部评分

butterflyspring 回答时间:2018-7-25 14:20:06
你的主频大于了131kHz,你可以测试一下,小于131时,range1应该没有问题..
Capture.JPG

评分

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

查看全部评分

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例程也是同样要跑飞。
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版