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

CubeMX生成的SysClock问题

[复制链接]
zhjb1 提问时间:2017-3-31 16:06 /
新入手一块STM32F103C8的小板子,在测试LCD时,感觉速度很慢,ASCII码的清屏都有明显的刷屏视觉,其外置晶振为8MHz。不想再焊了,想用PLL将SysClock提高到允许的72MHz或更高试试。
用CubeMX生成的代码:
//System Clock Configuration
void SystemClock_Config(void){
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
//Initializes the CPU, AHB and APB busses clocks
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = 16;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}
//Initializes the CPU, AHB and APB busses clocks
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK){Error_Handler();}
//Configure the Systick interrupt time
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
//Configure the Systick
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
//SysTick_IRQn interrupt configuration
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

生成的代码中 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;这一句是不用PLL,当改成 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;就报错这一句。问题是,这一堆代码中只有这一行有PLL,其他的都没有,应该如何操作呢?在CubeMX中左边也找不到设置PLL的地方,无奈求助。
顺便说一下,CubeMX是首次使用,还是不太熟悉。
先谢谢了。
收藏 评论3 发布时间:2017-3-31 16:06

举报

3个回答
奏奏奏 回答时间:2017-3-31 16:14:31
请参考这个帖子解决:
关于STM32CubeMX 4.20.0版本时钟配置BUG的修复方案
https://www.stmcu.org.cn/module/ ... amp;fromuid=3319693
(出处: 意法半导体STM32/STM8技术社区)
zhjb1 回答时间:2017-3-31 16:32:30
奏奏奏 发表于 2017-3-31 16:14
请参考这个帖子解决:
关于STM32CubeMX 4.20.0版本时钟配置BUG的修复方案
https://www.stmcu.org.cn/module/for ...

谢谢,改了不报错,但速度没有变化。问一下:如果要是高SysClock需要改哪里呢?下边:
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;//RCC_SYSCLK_DIV1;RCC_SYSCLK_DIV16;RCC_SYSCLK_DIV128
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;//RCC_HCLK_DIV1;RCC_HCLK_DIV16;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;//RCC_HCLK_DIV1;RCC_HCLK_DIV16;
不行,采用DIV16后更慢了,还有两处有数值,一处=16,增大或减小都不变,另一处 /1000,增加或减少5倍,没有影响。其他就不知道改哪里可以改变SysClock了,先谢谢了
奏奏奏 回答时间:2017-3-31 21:24:13
zhjb1 发表于 2017-3-31 16:32
谢谢,改了不报错,但速度没有变化。问一下:如果要是高SysClock需要改哪里呢?下边:
RCC_ClkInitStruct ...

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
修改为:
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI;

就应该能正常使用了

所属标签

相似问题

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