收发双方波特率是否一致,还有你的时钟频率是否准确?
我用的外部晶振是8Mhz的,然后倍频到72M。这些时钟设置在103上没问题
RCC_DeInit(); //设置RCC寄存器重新设置为默认值
/* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON); //打开外部高速时钟晶振
/* Wait till HSE is ready */
HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待外部高速时钟晶振工作
if (HSEStartUpStatus == SUCCESS)//外部就绪
{
/* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* Flash 2 wait state */
FLASH_SetLatency(FLASH_Latency_2);
/*************************************************************************/
/* HSE=8MHz,HCLK=72MHz,PCLK2=72MHz,PCK1=36MHz */
/*************************************************************************/
/* HCLK = SYSCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB时钟不分频
/* PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1); //设置APB2时钟不分频
/* PCLK1 = HCLK/2 */
RCC_PCLK1Config(RCC_HCLK_Div2); //设置APB1时钟二分频
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //设置ADC时钟2分频 12Mhz
/* PLLCLK = 8MHz * 9 = 72 MHz */
RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9);
/* Enable PLL */
RCC_PLLCmd(ENABLE); //使能PLL
/* Wait till PLL is ready */
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {
}
/* Select PLL as system clock source */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/* Wait till PLL is used as system clock source */
while (RCC_GetSYSCLKSource() != 0x08) {
}
} lishuchao 发表于 2015-5-28 10:28
收发双方波特率是否一致,还有你的时钟频率是否准确?
我的外部晶振是8Mz的,想要倍频到72M这样行么? PC串口接收软件的波特率是多少?我看你配置的是9600 安 发表于 2015-5-28 10:38
PC串口接收软件的波特率是多少?我看你配置的是9600
串口软件也是9600.
我在stm32f10x.h文件中做如下修改就好了。
#if !definedHSE_VALUE
//#ifdef STM32F10X_CL
// #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
//#else
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
//#endif /* STM32F10X_CL */
#endif /* HSE_VALUE */
奇怪的是,我的文件中并没有定义 STM32F10X_CL的地方呀 USE_STDPERIPH_DRIVER, STM32F10X_CL, USE_STM3210C_EVAL
你看一下工程设置中,C/C++.你把这里的STM32F10X_CL改成你需要的值.107默认都是用的25Mhz的晶振. 安 发表于 2015-5-28 10:54
USE_STDPERIPH_DRIVER, STM32F10X_CL, USE_STM3210C_EVAL
你看一下工程设置中,C/C++.你把这里的STM32F10X_C ...
我现在的工程设置中,C/C++中就只有USE_STDPERIPH_DRIVER, 也可以编译成功,但是就是还得把25的地方注释掉 因为你把那个去掉了.这里屏蔽了.即使不定义,这里判断走的是else分支.
//#ifdef STM32F10X_CL
// #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
//#else
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
//#endif /* STM32F10X_CL */
#endif /* HSE_VALUE */
页:
1
[2]