你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F107VCT6串口发送数据乱码

[复制链接]
天堂隔壁 提问时间:2015-5-28 10:09 /
阅读主题, 点击返回1楼
收藏 评论16 发布时间:2015-5-28 10:09
16个回答
天堂隔壁 回答时间:2015-5-28 10:32:56
lishuchao 发表于 2015-5-28 10:28
收发双方波特率是否一致,还有你的时钟频率是否准确?

我用的外部晶振是8Mhz的,然后倍频到72M。这些时钟设置在103上没问题
  1.         RCC_DeInit();         //设置RCC寄存器重新设置为默认值

  2.         /* Enable HSE */
  3.         RCC_HSEConfig(RCC_HSE_ON); //打开外部高速时钟晶振

  4.         /* Wait till HSE is ready */
  5.         HSEStartUpStatus = RCC_WaitForHSEStartUp();          //等待外部高速时钟晶振工作

  6.         if (HSEStartUpStatus == SUCCESS)  //外部就绪
  7.         {
  8.                 /* Enable Prefetch Buffer */
  9.                 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

  10.                 /* Flash 2 wait state */
  11.                 FLASH_SetLatency(FLASH_Latency_2);

  12.                 /*************************************************************************/
  13.                 /*   HSE=8MHz,HCLK=72MHz,PCLK2=72MHz,PCK1=36MHz                         */
  14.                 /*************************************************************************/

  15.                 /* HCLK = SYSCLK */
  16.                 RCC_HCLKConfig(RCC_SYSCLK_Div1);          //设置AHB时钟不分频

  17.                 /* PCLK2 = HCLK */
  18.                 RCC_PCLK2Config(RCC_HCLK_Div1);         //设置APB2时钟不分频

  19.                 /* PCLK1 = HCLK/2 */
  20.                 RCC_PCLK1Config(RCC_HCLK_Div2);                //设置APB1时钟二分频

  21.                 RCC_ADCCLKConfig(RCC_PCLK2_Div6);        //设置ADC时钟2分频 12Mhz

  22.                 /* PLLCLK = 8MHz * 9 = 72 MHz */
  23.                 RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9);

  24.                 /* Enable PLL */
  25.                 RCC_PLLCmd(ENABLE);         //使能PLL


  26.                 /* Wait till PLL is ready */
  27.                 while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {
  28.                 }

  29.                 /* Select PLL as system clock source */
  30.                 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

  31.                 /* Wait till PLL is used as system clock source */
  32.                 while (RCC_GetSYSCLKSource() != 0x08) {
  33.                 }
  34.         }
复制代码
天堂隔壁 回答时间: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文件中做如下修改就好了。
  1. #if !defined  HSE_VALUE

  2. //#ifdef STM32F10X_CL   
  3. // #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
  4. //#else
  5.   #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
  6. //#endif /* STM32F10X_CL */
  7. #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 */
12
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版