[求助] 初学STM32的串口实验,在接收时出现以下的乱码?是什么原因呢

wangyan238885   2012-6-22 23:54 楼主

接收乱码.jpg

 

这是我接收到得乱码截图,请各位大侠指教下是什么原因呢?谢谢了啊

附上程序:

#include "stm32f10x.h"
GPIO_InitTypeDef GPIO_InitStructure; 

USART_InitTypeDef USART_InitStructure; 

unsigned char TxBuf1[100] = "神州三号,串口测试程序";
unsigned char i;

void gpio_init()   

{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);  
    GPIO_StructInit(&GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA , &GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure); 
}
void usart_init()   

{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
 USART_StructInit(&USART_InitStructure);
    USART_InitStructure.USART_BaudRate = 115200;    //设置波特率为115200//
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;   //设置数据位为8位//
    USART_InitStructure.USART_StopBits = USART_StopBits_1;     //设置停止位为1位//
    USART_InitStructure.USART_Parity = USART_Parity_No;      //无奇偶校验位//
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    //发送与接收//
    USART_InitStructure.USART_HardwareFlowControl =USART_HardwareFlowControl_None;   //没有硬件流控//
 USART_Init(USART1, &USART_InitStructure);  //对串口1进行初始化
 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);  //接收的中断使能打开:
    USART_ITConfig(USART1, USART_IT_TXE, ENABLE);  //发送的中断使能打开
 USART_Cmd(USART1 , ENABLE);

}

 

int main()   

   usart_init();
   gpio_init();
  for( i = 0; TxBuf1 != '\0'; i++) {
USART_SendData(USART1 , TxBuf1);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
 
}

回复评论 (19)

求解答,自己顶起自己
点赞  2012-6-23 12:23
同问,我也发的乱码,发0x24结果PC收到的是0xf9
点赞  2012-6-23 18:23
这种情况 最有可能就是波特率的问题
点赞  2012-6-25 13:41

回复 4楼 xinjitmzy 的帖子

那波特率大概要怎么设置呢?谢谢
点赞  2012-6-25 14:15
楼主我也遇到你这样的问题。
你的程序好歹还能收到“神州三号,串口测试程序”,请问你除了上面贴出来的程序以外,其他地方如stm32f10x.h和system_stm32f10x.c等地方有没有作修改,还是直接用的库里的文件没改?
还有你的晶振是25M还是8M
点赞  2012-6-25 15:47
应该是波特率问题,误差比较大,找一个误差率小的波特率试试
点赞  2012-6-25 22:45

回复 5楼 wangyan238885 的帖子

遇到这样的情况不要急,既然能收到数据,说明程序什么的是没有问题的
你在网上搜搜,波特率的计算公式 我记不清了,设置一个精确一点的波特率
还有  串口调试助手的话  波特率要与你设置的对应~~
点赞  2012-6-26 08:35
楼上的用ST的库:
USART_InitStructure.USART_BaudRate = 115200;    //设置波特率为115200//

这里设置不就可以了吗,要自己配寄存器?
点赞  2012-6-26 08:54
楼主我的问题解决了,我用的是F107VCT6,在MDK中C/C++选项卡我吧编译选项DEFINE改成USE_STDPERIPH_DRIVER, STM32F10X_CL就行了,我原来是USE_STDPERIPH_DRIVER, STM32F10X_HD
好像和芯片系列有关系,STM32F10X_CL是107系列
点赞  2012-6-26 09:53

回复 9楼 hjsh 的帖子

你这个115200,也不是无缘无故得出来的啊~~
点赞  2012-6-26 10:33

回复 11楼 xinjitmzy 的帖子

ST的库函数不是会根据你写的115200对寄存器进行配置嘛,最多他配置得误差大了点,实在不行自己配。但是我想ST不至于这么差吧
点赞  2012-6-26 12:29

回复 12楼 hjsh 的帖子

恩恩, 我理解你的意思~~
点赞  2012-6-26 12:31

回复 6楼 hjsh 的帖子

直接用库里的文件没改,晶振是是8M 的
点赞  2012-6-26 18:00

回复 10楼 hjsh 的帖子

我用的是stm32f103zet6,好像改了不行,呵呵。
点赞  2012-6-26 18:22
我也是神州三号的板子  源程序是没错的  只是比较不好懂 头文件里有一个其他的包含  我每次都不爱用  可以去网上搜搜  我滴调通了 我可以发给你
点赞  2012-7-28 10:10

你好

可以加我QQ吗?252730659,我有些问题可以向你讨教下
点赞  2012-7-28 17:32
遇到同样问题。。。
点赞  2015-7-30 08:27

1


1、首先要确保使用keil程序正确编译,并且程序经过调试,已经可以正常发送英文字符,但是发送中文字符时乱码。


2


使用记事本打开main.c文件(或其他主程序),点击另存为,在右下方选择编码方式为ANSI,替换原文件即可


3


替换完成后,重新进行编译,程序应该可以正常运行

点赞  2018-2-23 14:56
点赞  2018-3-3 21:57
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复