请选择 进入手机版 | 继续访问电脑版

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

STM32F103外置晶振问题?

[复制链接]
qazplm3218 提问时间:2019-4-8 17:12 /
STM32F103R8T6外置晶振:8MHz      驱动LCD12864(不带字库)晶振设置如何:void RCC_Configuration(void)                                                                                                                                               
        RCC_DeInit();                                                                                                                                                                                                       
        RCC_HSEConfig(RCC_HSE_ON);                                                                                                                                                
        while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);                                               
        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);                                       
        FLASH_SetLatency(FLASH_Latency_2);                                                                                                               
        RCC_HCLKConfig(RCC_SYSCLK_Div1);                                                                                                                       
        RCC_PCLK2Config(RCC_HCLK_Div1);                                                                                                                        
        RCC_PCLK1Config(RCC_HCLK_Div2);                                                                                                                               
        FLASH_SetLatency(FLASH_Latency_2);                                                                                                                
        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);                                       
        RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);                                       
        RCC_PLLCmd(ENABLE);                                                                                                                                                                               
        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);                                               
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);                                                                               
        while(RCC_GetSYSCLKSource()!=0x08);                                                                                                        
}


STM32F103R8T6+显示屏,实时显示数据。
ATMEGA16外接16MHz晶振,驱动LCD12864(不带字库),实时显示数据

两种单片机的驱动LCD12864程序一样,实时显示的数据、程序也一样。ATMEGA16显示实时数值没有卡顿现象,很流畅。
反而STM32F103R8T6显示实时数值有卡顿现象,不流畅,感觉ATMEGA16的运行速度要比STM32F103R8T6快很多。
STM32F103R8T6和ATMEGA16的显示程序和驱动程序都是一样的,没说明什么区别。
我的理解应该是STM32F103R8T6外接8M晶振,然后倍频到72M,运行速度应该要比ATMEGA16的16M快很多才对,为什么反而慢很多?是我的晶振设置有问题吗??我之前都是用ATMEGA系类单片机,刚刚接触STM32F103,请各位指教一下?

收藏 评论9 发布时间:2019-4-8 17:12

举报

9个回答
wenyangzeng 回答时间:2019-4-8 17:35:48
本帖最后由 wenyangzeng 于 2019-4-8 17:44 编辑

运行固件库方式的STM32F103的系统时钟配置需要把system_stm32f10x.c中的第115行的
/*#define SYSCLK_FREQ_72MHz  72000000*/
的注释去掉,否则可能只是运行在8MHZ

而在CubeMX的配置:
  1. void SystemClock_Config(void)
  2. {

  3.   RCC_OscInitTypeDef RCC_OscInitStruct;
  4.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  5.     /**Initializes the CPU, AHB and APB busses clocks
  6.     */
  7.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  8.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  9.   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  10.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  11.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  12.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  13.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  14.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  15.   {
  16.     _Error_Handler(__FILE__, __LINE__);
  17.   }

  18.     /**Initializes the CPU, AHB and APB busses clocks
  19.     */
  20.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  21.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  22.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  23.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  24.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  25.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  26.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  27.   {
  28.     _Error_Handler(__FILE__, __LINE__);
  29.   }

  30.     /**Configure the Systick interrupt time
  31.     */
  32.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  33.     /**Configure the Systick
  34.     */
  35.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  36.   /* SysTick_IRQn interrupt configuration */
  37.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  38. }
复制代码


评分

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

查看全部评分

七哥 回答时间:2019-4-8 17:43:22
LCD12864是低速设备,STM32用72M跑完全没有问题,恐怕还得降低速度。
显示卡顿是程序问题。
你说的显示程序和驱动程序完全一样,这个不大可能,延时函数肯定不一样。STM32用IO模拟时序点屏的话,需要每个IO操作之间加点延时,否则IO可能跑乱。

评分

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

查看全部评分

qazplm3218 回答时间:2019-4-8 18:25:50
toofree 发表于 2019-4-8 17:43
LCD12864是低速设备,STM32用72M跑完全没有问题,恐怕还得降低速度。
显示卡顿是程序问题。
你说的显示程序 ...

只是延时程序不一样,但是延时时间是一样的!我认为不是程序的问题
qazplm3218 回答时间:2019-4-8 18:27:05
wenyangzeng 发表于 2019-4-8 17:35
运行固件库方式的STM32F103的系统时钟配置需要把system_stm32f10x.c中的第115行的
/*#define SYSCLK_FREQ_7 ...

我注释掉,在测试下
七哥 回答时间:2019-4-8 18:54:24
本帖最后由 toofree 于 2019-4-8 18:57 编辑
qazplm3218 发表于 2019-4-8 18:25
只是延时程序不一样,但是延时时间是一样的!我认为不是程序的问题

ATMEGA16是单周期指令,每条指令都是按顺序执行的;STM32带流水的,指令执行先后不一定,得中间加点延时才行。
如果程序写好的话,至少不会让你能感觉到流畅度不同。
终极方案,用逻辑分析仪抓一下,ATMEGA16和STM32操作LCD的管脚时序,对比一下。
qiangtech 回答时间:2019-4-8 19:14:06
用逻辑分析仪抓一下时序,看一下哪里产生的延时,

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

Dylan疾风闪电 回答时间:2019-4-9 08:52:45
测试程序里写死read或write时序,确保两边的功能一样。
然后用示波器抓LCD驱动引脚,比对两个版本的时序中的延时。

硬件变了,时序肯定是有差异的。你想要完全一致,肯定要调整延时之类的参数。毕竟指令周期不一样。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

dodoey 回答时间:2019-4-9 17:27:18
dodoey邀请您访问论坛-意法半导体STM32/STM8技术社区
https://www.stmcu.org.cn/module/forum/?fromuid=3552542

点评

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