串口uart输出乱码怎么解决?

conlin_hongwei 2012-12-10 01:37:07
uart输出乱码:
平台:恩智浦EM773-->cortex-m0即arm7的处理器,有数据手册的;
uart:裸机下的uart驱动,但老是输出乱码

波特率,数据位,停止位,校验位等都检查了;系统核心时钟,波特率也降低了;结果还是一样乱码
望请大侠帮忙:

这个是串口配置:uart_config_t config = {RATE_19200_BAUD, BITS_8, BITS_1, NO_PARITY};
串口写函数:
/**********************************************************************************************************
* Ser_Write()
*
* Description : Write data to a serial port.
*
* Argument(s) : pdata Pointer to data to write
* : count Number of bytes (characters) to write
*
* Return(s) : none.
**********************************************************************************************************/

void Ser_Write(uint8_t *pdata, uint16_t count)
{
uint8_t TxData = *pdata++;

if (count > 0)
{
count--; /* sent the first char out here, the rest is done by ISR */
rtk_sem_acquire(UART_TxBusySem); /* Wait until Uart is free */
UART_TxPdata = pdata;
UART_TxCount = count;
UART->THR = TxData; /* sent first character */
UART->IER |= IER_THRE; /* Enable THRE interrupt */
rtk_sem_acquire(UART_TxReadySem); /* Wait until TX complete */
rtk_sem_release(UART_TxBusySem);
}
}
...全文
4622 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
HuaiShuShuV 2012-12-28
  • 打赏
  • 举报
回复
引用 13 楼 hongweilinux 的回复:
谢谢各位的建议,问题查出来了;是TTL电平问题,开发板的TTL电平是3伏,但是我用的是USB转串口的5V,所以不管怎么弄都会是乱码,换用232电平转换芯片就可以了
我擦
conlin_hongwei 2012-12-28
  • 打赏
  • 举报
回复
谢谢各位的建议,问题查出来了;是TTL电平问题,开发板的TTL电平是3伏,但是我用的是USB转串口的5V,所以不管怎么弄都会是乱码,换用232电平转换芯片就可以了
HuaiShuShuV 2012-12-18
  • 打赏
  • 举报
回复
你看看显示设置,有可能是HEX和文字的显示没有设置对也会出现乱码
Binzo 2012-12-15
  • 打赏
  • 举报
回复
引用
uint8_t TxData = *pdata++;
要知道*的优先级是大于++的, (*pdata)++;
1586874907 2012-12-14
  • 打赏
  • 举报
回复
应该是波特率有问题,可用示波器确认一下
zhujinqiang 2012-12-12
  • 打赏
  • 举报
回复
乱码?发送接收编码格式一样吗?是用ASCII?16进制?
诶呦 2012-12-12
  • 打赏
  • 举报
回复
目测——波特率问题
摩斯电码 2012-12-12
  • 打赏
  • 举报
回复
有可能是复用的问题吗?
zhujinqiang 2012-12-12
  • 打赏
  • 举报
回复
恩,楼上几位都说是波特率。
fish_linux 2012-12-12
  • 打赏
  • 举报
回复
波特率不正确(主要原因是时钟配置不对)可能导致乱码的现象!
lr2131 2012-12-11
  • 打赏
  • 举报
回复
昨天刚解决了uart通信的问题,建议楼主一步一步的查问题根源。先把通信双方的RX和TX短接,做回环测试,可以先验证本身程序的逻辑问题。如果其中一方是PC的话或者是Linux系统的话,可以下个串口调试工具,先用这个程序和ARM对接,看硬件和下位机的设置有问题没有。最后才是你的程序和ARM通信。一步一步的查,缩小问题的范围,一定能找到问题的。串口通信的问题基本都可以像这么来查,是个较通用的方法。
流水恋歌 2012-12-11
  • 打赏
  • 举报
回复
如果波特率太大也会出现乱码
falloutmx 2012-12-10
  • 打赏
  • 举报
回复
量波形,看脉宽和比特位对不对
conlin_hongwei 2012-12-10
  • 打赏
  • 举报
回复
请大侠帮忙啊,在线等急啊
内容概要:本文深入探讨了STM32串口通信中常见的乱码问题及其解决方案。首先介绍了STM32串口通信的基本原理和硬件架构,包括串口通信的起始位、数据位、校验位和停止位等组成部分,以及USART和UART的区别。接着分析了乱码问题的常见原因,涵盖硬件连接(如引脚虚焊、接触不良、串口线损坏)和软件配置(如时钟配置错误、波特率设置不当、数据处理错误)两方面。文章详细讲解了STM32时钟系统,包括HSI、HSE、LSI、LSE和PLL等时钟源的特点及配置方法,并重点阐述了系统时钟SYSCLK的选择与配置,以及APB总线时钟与串口时钟的关系。随后介绍了波特率的计算原理与方法,给出了具体的计算公式和代码实现。最后,针对乱码问题,提出了详细的实战步骤,包括硬件连接排查、时钟配置检查与修正、波特率计算与验证,以及数据处理优化。 适合人群:具备一定嵌入式开发基础,特别是使用STM32进行串口通信的工程师和技术人员。 使用场景及目标:①理解和解决STM32串口通信中的乱码问题;②掌握时钟配置和波特率计算的方法;③优化数据处理流程,提高串口通信的稳定性和准确性。 阅读建议:本文内容详尽,涉及硬件和软件配置的多个方面。建议读者在阅读时结合实际项目进行实践,特别是在时钟配置、波特率计算和数据处理优化部分,通过实验和仿真验证相关设置,逐步积累经验,提升解决问题的能力。

21,618

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧