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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版