OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2387|回复: 5

F105与F103时钟设置的奇怪现象

[复制链接]

12

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2018-6-27
在线时间
28 小时
发表于 2019-9-15 18:14:32 | 显示全部楼层 |阅读模式
10金钱
F105是互联网型,使用宏定义 STM32F10X_CL,同时之前F103的程序是使用STM32F10X_HD,将F103的工程改成F105后,首先需要改这个宏定义,而且由于我F105的板子同F103的板子完全一样除了MCU,都是使用8MHZ晶振,因此也将 stm32f10x.h 文件中的#define HSE_VALUE    ((uint32_t)25000000) 改为了 8000000,且system_stm32f10x.c 文件中SetSysClockTo72(void)函数对应位置也改为 RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV2 | RCC_CFGR2_PLL2MUL10 |RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);

这样原F103的程序已经完成迁移成F105的,测试大部分功能正常,但在一个使用延时等待读GPIO电位变化的地方出现异常,
然后屏蔽所有功能单独循环做
WRITE(PA0,HIGH);
delay(10);
WRITE(PA0,LOW);
delay(10);
通过抓波发现延迟时间变长了,延迟函数如下:


static inline void _delay_us(uint32_t usec) {
  uint32_t n = 1+ usec * 12;
        for(;n>0;n--)
                __nop();
}

static inline void delay(uint32_t msec){
        _delay_us(1000*msec);
}


同样的程序在F103中等待10ms的地方,在F105却要等待16ms,分别调试F103和F105的板子,HCK PCLK ,所有时钟都是一样,系统时钟都是72MHZ。
奇怪的地方在此:在程序中设置外设时钟的地方有个RCC_ADCCLKConfig(RCC_PCLK2_Div4); 去掉这个设置ADC时钟,F105延迟时间正常为10ms,但F103的延迟却变成16ms,保留此代码延迟10ms,F105为16ms,F103为10ms,为什么设置ADC时钟会对延迟等待有影响,F105和F103影响还正好相反。
以下是我的main函数及系统初始化部分代码:
int main(){
SystemInit();
SystemCoreClockUpdate();

USART_OverSampling8Cmd(USART1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div4);

SysTick_Init(SysTick_CLKSource_HCLK_Div8);
RCC_ClocksTypeDef rcc_cl;
RCC_GetClocksFreq(&rcc_cl);

while(1)
{
WRITE(PA0,HIGH);
delay(10);
WRITE(PA0,LOW);
delay(10);
}
}
这是为什么?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-9-16 02:10:41 | 显示全部楼层
估计时钟设置没对吧,你输出个PMW看看?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-9-16 02:10:45 | 显示全部楼层
估计时钟设置没对吧,你输出个PMW看看?
回复

使用道具 举报

12

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2018-6-27
在线时间
28 小时
 楼主| 发表于 2019-9-16 10:57:18 | 显示全部楼层
正点原子 发表于 2019-9-16 02:10
估计时钟设置没对吧,你输出个PMW看看?

没影响
回复

使用道具 举报

12

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2018-6-27
在线时间
28 小时
 楼主| 发表于 2019-9-16 11:12:22 | 显示全部楼层
按原子哥意见,做了一个基本通用定时器TIM2控制GPIO变化的PWM,TIM2->PSC = 359,TIM2->ARR = 100,中断源为TIM_IT_Update,抓波得到一个高电平或低电平时间为0.5ms,好像比预期块了1倍,经以上参数设置后TIM2的频率应该是72MHZ / 2 /(359+1)=100KHZ,中断发生周期应是1KHZ,即1ms一次,TIM2预分频应该是这么算的把?
并且有没有RCC_ADCCLKConfig(RCC_PCLK2_Div4); 都一样
回复

使用道具 举报

7

主题

175

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1327
金钱
1327
注册时间
2019-7-11
在线时间
165 小时
发表于 2019-9-17 08:54:07 | 显示全部楼层
有没有可能是这个延时函数本身的问题。
世界和平
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 05:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表