打印
[STM32F1]

stm32串口总是乱码

[复制链接]
1909|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lizye|  楼主 | 2018-8-29 18:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm32串口总是乱码
沙发
wuhany| | 2018-8-29 18:26 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
板凳
lizye|  楼主 | 2018-8-29 18:29 | 只看该作者
程序如下:
USART.C的

#include "stm32f10x.h"
#include "Usart.h"
#include "led.h"
#include "stdio.h"
#include "Delay.h"


//加入以下代码,支持printf函数,而不需要选择use MicroLIB
#if 1
#pragma import(__use_no_semihosting)            
//标准库需要的支持函数                 
struct __FILE
{
        int handle;

};

FILE __stdout;      
//定义_sys_exit()以避免使用半主机模式   
_sys_exit(int x)
{
        x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{      
        while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    USART1->DR = (u8) ch;      
        return ch;
}
#endif

void USART1_Init(void)
{
/**********串口1时钟配置**********/

        USART_ClockInitTypeDef  USART_ClockInitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
        USART_InitTypeDef USART_InitStructure;

        USART_ClockInitStructure.USART_Clock = USART_Clock_Disable; //串口时钟禁止
        USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; //数据低电平有效
        USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;//配置CPHA使数据在第2个边沿的时候被捕获         
        USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;// 禁用最后一位,使对应的时钟脉冲不会再输出到SCLK引脚        
        USART_ClockInit(USART1, &USART_ClockInitStructure); //配置USART与时钟相关的设置         

/**********串口1GPIO配置**********/        

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA
        |RCC_APB2Periph_AFIO, ENABLE);        //USART1串口时钟及GPIOA时钟使能
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;        //USART1_TX          PA.9
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出
    GPIO_Init(GPIOA, &GPIO_InitStructure);        //USART1_TX初始化
      
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;         //USART1_RX          PA.10
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
    GPIO_Init(GPIOA, &GPIO_InitStructure);  //USART1_RX初始化

/**********串口1配置**********/

        USART_InitStructure.USART_BaudRate = 9600;  //波特率9600
        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_HardwareFlowControl = USART_HardwareFlowControl_None;//无流控制        
        USART_InitStructure.USART_Mode = USART_Mode_Tx;         //TX模式使能
//        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;         //Rx模式和Tx模式使能        
        USART_Init(USART1,&USART_InitStructure);    //串口1配置初始化

/**********串口1中断配置**********/

        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;        //IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);        //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器USART1

        USART_ITConfig(USART1, USART_IT_TXE, ENABLE);//开启串口1发送中断
        USART_Cmd(USART1,ENABLE);   //启动串口1         
}


void USART1_IRQHandler()
{
        if(USART_GetITStatus(USART1,USART_IT_TXE)!=RESET)//        检测是否开启串口1 TC发送中断
        {
                LED0_ON;               
                LED1_ON;
                USART_SendData(USART1,0X02); //发送数据0X01
//                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=RESET); //等待数据发送完成               
//                USART_ClearFlag(USART1,USART_IT_TC);//        清除TC发送完成标志位
                Delay_ms(500);
                LED0_OFF;               
                LED1_OFF;
//                USART_ClearITPendingBit(USART1,USART_IT_TXE); //清除TXE中断标志位
        }

}

main.c如下
#include "stm32f10x.h"
#include "Delay.h"
#include "led.h"
#include "key.h"
#include "Usart.h"
#include "stdio.h"



int main()
{
        u8 time=0;
        SystemInit();        //系统时钟等初始化
        Key_Init();        //        
        LED_Init();//
        Delay_init(72);//
        USART1_Init();//
        while(1)
        {

                time++;
//                USART_ClearFlag(USART1,USART_IT_TC);
                printf("\n welcome to the world of STM32 \n");
                USART_SendData(USART1,0X01);
                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=RESET);
                USART_ClearFlag(USART1,USART_IT_TC);
                while(time%5000==0)
                {
                        printf("\n welcome to the world of STM32 \n");
                        printf("\n the data you have sent is :\n");
                        USART_SendData(USART1,0X01);
                        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=RESET);
//                        USART_ClearFlag(USART1,USART_IT_TC);//        清除TC发送完成中断标志位

                }
               

        }

}
但是开启串口调试助手后,显示的始终是一个相同字符

使用特权

评论回复
地板
lizye|  楼主 | 2018-8-29 18:32 | 只看该作者
乱码全是倒L,求指导。

使用特权

评论回复
5
jiaxw| | 2018-8-29 18:34 | 只看该作者

时钟对吗,这么一致的乱码很奇特

使用特权

评论回复
6
liliang9554| | 2018-8-29 18:36 | 只看该作者
看看BAUD特率是不否正确,那示波器看下;

使用特权

评论回复
7
shimx| | 2018-8-29 18:38 | 只看该作者

数据你就一直发0X55,或0XAA;

使用特权

评论回复
8
午夜粪车| | 2018-8-30 08:28 | 只看该作者

串口调试助手设置不对吧,看是是使用的16进制接收吗?

使用特权

评论回复
9
zhanghqi| | 2018-8-30 08:29 | 只看该作者
你是不是忘记选择hex显示了

使用特权

评论回复
10
zhaoxqi| | 2018-8-30 08:31 | 只看该作者
2楼说的时钟是指的什么?

使用特权

评论回复
11
zhenykun| | 2018-8-30 08:33 | 只看该作者
你确定硬件电路没问题么(电平匹配232----TTL),这个保证了才能谈其他的

使用特权

评论回复
12
wyjie| | 2018-8-30 08:36 | 只看该作者
顺便查查波特率,这个计算错误接收到也是乱码

使用特权

评论回复
13
huwr| | 2018-8-30 08:38 | 只看该作者

电脑的波特率对吗

使用特权

评论回复
14
wyjie| | 2018-8-30 08:42 | 只看该作者
上位机配置对吗,A,B看看接反没

使用特权

评论回复
15
zhenykun| | 2018-8-30 08:45 | 只看该作者

可能是时钟没配置好

使用特权

评论回复
16
songqian17| | 2018-8-30 08:48 | 只看该作者
查看波特率和校验的设置,一般就是这个的问题。

使用特权

评论回复
17
lizye|  楼主 | 2018-8-30 08:49 | 只看该作者
结贴了,多谢大家讨论这么多哈,呵呵

使用特权

评论回复
18
CCompton| | 2018-8-30 11:07 | 只看该作者
八成是时序的问题

使用特权

评论回复
19
paotangsan| | 2018-9-1 15:27 | 只看该作者
有没有可靠接地

使用特权

评论回复
20
wakayi| | 2018-9-1 15:39 | 只看该作者
用示波器看看波形

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

852

主题

9757

帖子

2

粉丝