初级会员

- 积分
- 188
- 金钱
- 188
- 注册时间
- 2018-6-27
- 在线时间
- 28 小时
|
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);
}
}
这是为什么?
|
|