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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版