我用内部RC作为内部时钟时候波特不对
焊接上晶振就对了
下面是时钟函数
- void RCC_Configuration(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_DeInit();//将外设 RCC寄存器重设为缺省值
-
- RCC_HSICmd(ENABLE);//使能HSI
- while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);//等待HSI使能成功
-
- RCC_HCLKConfig(RCC_SYSCLK_Div1);
- RCC_PCLK1Config(RCC_HCLK_Div1);
- RCC_PCLK2Config(RCC_HCLK_Div1);
- //RCC_ADCCLKConfig(RCC_PCLK2_Div6);
- //设置 PLL 时钟源及倍频系数
- //经过测试这里最多设置成RCC_PLLMul_13高了就会死机
- /*
- These bits represent the ratio of the SYSCLK (system clock) period to the Flash access
- time.
- 000 Zero wait state, if 0 < SYSCLK≤ 24 MHz
- 001 One wait state, if 24 MHz < SYSCLK ≤ 48 MHz
- 010 Two wait states, if 48 MHz < SYSCLK ≤ 72 MHz
- */
-
- /* Enable refetch Buffer */
- //FLASH->ACR |= FLASH_ACR_PRFTBE;
- /* Flash 2 wait state */
- //FLASH->ACR &= (u32)((u32)~FLASH_ACR_LATENCY);
- //FLASH->ACR |= (u32)FLASH_ACR_LATENCY_2;
- FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
- FLASH_SetLatency(FLASH_Latency_2);
-
- RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_9);//使能或者失能 PLL,这个参数可以取:ENABLE或者DISABLE
- RCC_PLLCmd(ENABLE);//如果PLL被用于系统时钟,那么它不能被失能
- //等待指定的 RCC 标志位设置成功 等待PLL初始化成功
- while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
-
- //设置系统时钟(SYSCLK) 设置PLL为系统时钟源
- RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//选择想要的系统时钟
- //等待PLL成功用作于系统时钟的时钟源
- // 0x00:HSI 作为系统时钟
- // 0x04:HSE作为系统时钟
- // 0x08:PLL作为系统时钟
- while(RCC_GetSYSCLKSource() != 0x08);//需与被选择的系统时钟对应起来,RCC_SYSCLKSource_PLL
- /*
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- RCC_MCOConfig(RCC_MCO_HSI);
- */
- }
复制代码
|
看一下串口波特率怎么定的,里面调用了系统时钟的宏定义参数。
你这是哪个版本的库
评分
查看全部评分
串口的配置
我用的是3.5的库
用到了RCC_ClocksStatus.PCLK2_Frequency,RCC_ClocksStatus.PCLK1_Frequency,这是跟系统时钟有关系的。请参考文件“Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c”