天堂隔壁 发表于 2015-5-28 10:32:56

lishuchao 发表于 2015-5-28 10:28
收发双方波特率是否一致,还有你的时钟频率是否准确?

我用的外部晶振是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) {
                }
        }

天堂隔壁 发表于 2015-5-28 10:37:31

lishuchao 发表于 2015-5-28 10:28
收发双方波特率是否一致,还有你的时钟频率是否准确?

我的外部晶振是8Mz的,想要倍频到72M这样行么?

发表于 2015-5-28 10:38:05

PC串口接收软件的波特率是多少?我看你配置的是9600

天堂隔壁 发表于 2015-5-28 10:50:03

安 发表于 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的地方呀

发表于 2015-5-28 10:54:07

USE_STDPERIPH_DRIVER, STM32F10X_CL, USE_STM3210C_EVAL
你看一下工程设置中,C/C++.你把这里的STM32F10X_CL改成你需要的值.107默认都是用的25Mhz的晶振.

天堂隔壁 发表于 2015-5-28 10:59:31

安 发表于 2015-5-28 10:54
USE_STDPERIPH_DRIVER, STM32F10X_CL, USE_STM3210C_EVAL
你看一下工程设置中,C/C++.你把这里的STM32F10X_C ...

我现在的工程设置中,C/C++中就只有USE_STDPERIPH_DRIVER, 也可以编译成功,但是就是还得把25的地方注释掉

发表于 2015-5-28 11:25:14

因为你把那个去掉了.这里屏蔽了.即使不定义,这里判断走的是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]
查看完整版本: STM32F107VCT6串口发送数据乱码