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

STM32L151C8T6A的板子 自己画的 串口乱码

[复制链接]
在路上… 提问时间:2019-3-29 09:18 /
悬赏5ST金币已解决
本帖最后由 在路上… 于 2019-3-29 10:22 编辑

如题,自己画的STM32L151C8TA的板子 内部HSI时钟,我直接使用CUBEMX生成的串口测试工程,发现串口输出的数据乱码,具体表现为我输出 0D 0A 但实际输出的确是8D 8A  我输出0x30 31 3 2实际输出0x70 71 72 这是什么问题啊?? 我还试了点亮LED灯 这个是正常的 。是我供电问题 还是其他问题呢? 按理说就一个最小系统版加LED和按键 不应该有啥问题啊  郁闷

hseTest.zip

下载

5.46 MB, 下载次数: 99, 下载积分: ST金币 -1

最佳答案

查看完整内容

同步串口的时钟输出管脚PA8 波特率用的115200? 时钟设的外部16M,HSE
收藏 评论21 发布时间:2019-3-29 09:18

举报

21个回答
七哥 回答时间:2019-3-29 09:18:44
在路上… 发表于 2019-3-29 11:21
PA8是干嘛用的? 其他没什么资源了 这个板就用了led和按键 其他就是串口了  ...

同步串口的时钟输出管脚PA8
1.png

波特率用的115200?
2.png

3.png

时钟设的外部16M,HSE
0.png
一代睡神的崛起 回答时间:2019-3-29 09:41:15
通信协议应该是没问题的,可能还是配置的时钟导致波特率影响数据了

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

在路上… 回答时间:2019-3-29 09:48:42
一代睡神的崛起 发表于 2019-3-29 09:41
通信协议应该是没问题的,可能还是配置的时钟导致波特率影响数据了

一开始我也怀疑是我配置问题 所以我用cubemx生成的代码 配置应该不会错了吧? 有没有可能是硬件问题呢
七哥 回答时间:2019-3-29 09:50:32
本帖最后由 toofree 于 2019-3-29 09:51 编辑

把你的工程发上来,你的描述不完全,或许可能还有错误。
首先用示波器或逻辑分析仪,看一下波特率对不对;
其次串口数据位设置对了没有?STM32的数据位数一般包括数据位+停止位(+校验位,是否包括这位得查一下,一时记不清)。

如果你要设置8位数据位,1位停止位,无校验,那么数据长度要设成9。
发0D 0A 实际输出的确是8D 8A,这可可能是数据位不够,像是少一位;但是发0x30 31 32 实际输出0x70 71 72,这个就不是少数据位的问题了,所以又产生了矛盾。如果是TTL输出的话,是不应该出现这种现象的;一般RS232芯片用法不对时,容易出数据错误问题。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

在路上… 回答时间:2019-3-29 10:07:15
toofree 发表于 2019-3-29 09:50
把你的工程发上来,你的描述不完全,或许可能还有错误。
首先用示波器或逻辑分析仪,看一下波特率对不对;
...
  1. static void MX_USART1_Init(void)
  2. {

  3.   /* USER CODE BEGIN USART1_Init 0 */

  4.   /* USER CODE END USART1_Init 0 */

  5.   /* USER CODE BEGIN USART1_Init 1 */

  6.   /* USER CODE END USART1_Init 1 */
  7.   husart1.Instance = USART1;
  8.   husart1.Init.BaudRate = 9600;
  9.   husart1.Init.WordLength = USART_WORDLENGTH_8B;
  10.   husart1.Init.StopBits = USART_STOPBITS_1;
  11.   husart1.Init.Parity = USART_PARITY_NONE;
  12.   husart1.Init.Mode = USART_MODE_TX_RX;
  13.   husart1.Init.CLKPolarity = USART_POLARITY_LOW;
  14.   husart1.Init.CLKPhase = USART_PHASE_1EDGE;
  15.   husart1.Init.CLKLastBit = USART_LASTBIT_DISABLE;
  16.   if (HAL_USART_Init(&husart1) != HAL_OK)
  17.   {
  18.     Error_Handler();
  19.   }
  20.   /* USER CODE BEGIN USART1_Init 2 */

  21.   /* USER CODE END USART1_Init 2 */

  22. }
复制代码

这是cubemx生成的配置代码,示波器挂过 波特率是对的
七哥 回答时间:2019-3-29 10:08:15
本帖最后由 toofree 于 2019-3-29 10:09 编辑
在路上… 发表于 2019-3-29 10:07
这是cubemx生成的配置代码,示波器挂过 波特率是对的

husart1.Init.WordLength = USART_WORDLENGTH_8B; 这条肯定是不对的

发个工程会死人吗?这样挤牙膏有意义?


在路上… 回答时间:2019-3-29 10:09:11
本帖最后由 在路上… 于 2019-3-29 10:24 编辑

这个是MCU的pcb

pcb

pcb
在路上… 回答时间:2019-3-29 10:11:32
toofree 发表于 2019-3-29 10:08
husart1.Init.WordLength = USART_WORDLENGTH_8B; 这条肯定是不对的

发个工程会死人吗?这样挤牙膏有意义 ...

老哥稳住 正在传工程 没搞过附件 还在琢磨
在路上… 回答时间:2019-3-29 10:25:22
toofree 发表于 2019-3-29 10:08
husart1.Init.WordLength = USART_WORDLENGTH_8B; 这条肯定是不对的

发个工程会死人吗?这样挤牙膏有意义 ...

8个数据位 配置应该是对的
freeelectron 回答时间:2019-3-29 10:41:33
串口算是低速设备,只要连上基本就能通讯的
确定HSI起震了吗?倍频系数与分频系数设置的多少?要最终的clk为32Mhz的

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

七哥 回答时间:2019-3-29 11:09:02
在路上… 发表于 2019-3-29 10:25
8个数据位 配置应该是对的

看了你的工程设置,8位数据位的确没错,在这个初始化结构体中的确只包含数据位和校验位。
这里看到你用了HSE,而不是HSI;串口用的是同步方式,这个方式很少用啊,不知道你用的什么地方呢,9600波特率已经很低了,按说不需要同步模式。用了同步串口也不要紧,对发送没影响;你的PA8脚接对了吗?没有没跟其它资源冲突。
在路上… 回答时间:2019-3-29 11:21:54
toofree 发表于 2019-3-29 11:09
看了你的工程设置,8位数据位的确没错,在这个初始化结构体中的确只包含数据位和校验位。
这里看到你用了 ...

PA8是干嘛用的? 其他没什么资源了 这个板就用了led和按键 其他就是串口了
废鱼 回答时间:2019-3-29 11:40:11
另外注意一下接收串口工具的配置,一定要和单片机一致。从这个上面看,感觉像是串口工具的位数或者校验位配置不匹配。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

在路上… 回答时间:2019-3-29 11:45:55
在路上… 发表于 2019-3-29 11:21
PA8是干嘛用的? 其他没什么资源了 这个板就用了led和按键 其他就是串口了  ...

嗯嗯 非常感谢 我焊了外部时钟 使用外部时钟后数据正常了  应该是内部时钟不准导致偶尔乱码 再次感谢您的帮助
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版