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

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

查看全部评分

toofree 回答时间: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 ...

我注释掉,在测试下
toofree 回答时间: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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版