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

STM32F107VCT6串口发送数据乱码

[复制链接]
天堂隔壁 提问时间:2015-5-28 10:09 /
本帖最后由 天堂隔壁 于 2015-5-28 10:20 编辑

如题。用STM32F107VCT6做一个工程,结果测试串口的时候发现 串口1发送数据乱码 ,发送0xaa,结果变成0xed。而且串口3也发送不出来数据,求助。

系统配置如下:
外部晶振 8MHZ
串口1: PA9.PA10
串口3D8,PD9
下面是工程文件,求大牛指点啊,卡了1天多了~
复件 FJKG_GSM_GPRS_V3_104.rar (5.62 MB, 下载次数: 14)
收藏 评论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: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 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 */
天堂隔壁 回答时间:2015-5-28 10:13:20
需要注明的是,我的程序使用IAP下载的。程序都可以通过串口1下载进去,就是通信就不对了~~~
废鱼 回答时间:2015-5-28 10:15:16
楼主,把你的程序重新传一下,里面的东西太多了.不必要的删除了.
天堂隔壁 回答时间:2015-5-28 10:18:13
安 发表于 2015-5-28 10:15
楼主,把你的程序重新传一下,里面的东西太多了.不必要的删除了.

没有不必要的呀~全部文件都在main.c里面
天堂隔壁 回答时间:2015-5-28 10:21:21
安 发表于 2015-5-28 10:15
楼主,把你的程序重新传一下,里面的东西太多了.不必要的删除了.

里面使用库函数的。所以看起来比较大
废鱼 回答时间:2015-5-28 10:25:53
附件带的其他通讯协议没有问题吗?
楼主用的是107的芯片.通过代码分析,应该是系统时钟配置错误.楼主可以用示波器测一下串口波特率.
107用的是25Mhz的晶振,103用的是8Mhz的.
李公 回答时间:2015-5-28 10:28:07
收发双方波特率是否一致,还有你的时钟频率是否准确?
天堂隔壁 回答时间:2015-5-28 10:28:24
安 发表于 2015-5-28 10:25
附件带的其他通讯协议没有问题吗?
楼主用的是107的芯片.通过代码分析,应该是系统时钟配置错误.楼主可以用示 ...

我也觉得有点问题了,我的板子是用的8MHZ晶振的。 没有用25M。 如果用25Mhz晶振的话,最大可以倍频到多少呢?我需要72MHZ的时钟
天堂隔壁 回答时间:2015-5-28 10:30:37
安 发表于 2015-5-28 10:25
附件带的其他通讯协议没有问题吗?
楼主用的是107的芯片.通过代码分析,应该是系统时钟配置错误.楼主可以用示 ...

还有我相请问下,串口波特率怎么测试?
废鱼 回答时间:2015-5-28 10:31:55
示波器抓一个数据的发送,看他的一个周期的频率.
天堂隔壁 回答时间: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:54:07
USE_STDPERIPH_DRIVER, STM32F10X_CL, USE_STM3210C_EVAL
你看一下工程设置中,C/C++.你把这里的STM32F10X_CL改成你需要的值.107默认都是用的25Mhz的晶振.
12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版