OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 246|回复: 3

STM32F103ZET6,使用串口1,printf函数发送数据给上位机,有时乱码有时正常

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2024-1-3
在线时间
2 小时
发表于 2024-4-29 17:16:21 | 显示全部楼层 |阅读模式
1金钱
波特率为115200,
使用printf函数发送数据给上位机,
Edit里Configuration的数据格式设置为中文简体,
按下按键key0通过串口usart1使用printf函数发送一次数据给上位机,有时正常有时乱码,
查了很多资料和网站帖子,也尝试着修改代码,但是一直没找到原因。
代码如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"

#include "usmart.h"
#include "can.h"
/************************************************
ALIENTEK 战舰STM32F103开发板 实验26
CAN实验-HAL库函数版
技术支持:www.openedv.com
淘宝店铺: http://eboard.taobao.com
关注微信公众平台微信号:"正点原子",免费获取STM32资料。
广州市星翼电子科技有限公司  
作者:正点原子 @ALIENTEK
************************************************/
       
int main(void)
{       
        extern CAN_RxHeaderTypeDef RxHeader;
  u8 key;
        u8 i=0,t=0;
        u8 cnt=0;
        u8 canbuf[8];
        u8 res;
        u8 mode=1;
  HAL_Init();                                     //初始化HAL库   
  Stm32_Clock_Init(RCC_PLL_MUL9);           //设置时钟,72M
        delay_init(72);                               //初始化延时函数
        uart_init(115200);                                        //初始化串口
        usmart_dev.init(84);                                    //初始化USMART       
        LED_Init();                                                        //初始化LED       
        KEY_Init();                                                        //初始化按键

        CAN1_Mode_Init(CAN_SJW_1TQ,CAN_BS2_8TQ,CAN_BS1_9TQ,4,CAN_MODE_LOOPBACK); //CAN初始化,波特率500Kbps      
        CAN_Config();
    while(1)
    {
        key=KEY_Scan(0);
                if(key==KEY0_PRES)//KEY0按下,发送一次数据
                {
                        printf("\r\n\r\n发送的CAN报文数据为:");        //显示数据
                        for(i=0;i<8;i++)
                        {
                                canbuf=cnt+i;//填充发送缓冲区
                                printf(" %02X",canbuf);        //显示数据
                        }
                        res=CAN1_Send_Msg(canbuf,8);//发送8个字节
                        if(res)printf("发送失败\r\n");                //提示发送失败
                        else printf("\r\n发送成功");                 //提示发送成功                                                                  
                }else if(key==WKUP_PRES)//WK_UP按下,改变CAN的工作模式
                {          
                        mode=!mode;
            if(mode==0)  CAN1_Mode_Init(CAN_SJW_1TQ,CAN_BS2_8TQ,CAN_BS1_9TQ,4,CAN_MODE_NORMAL);        //回环模式,波特率500Kbps
            else if(mode==1) CAN1_Mode_Init(CAN_SJW_1TQ,CAN_BS2_8TQ,CAN_BS1_9TQ,4,CAN_MODE_LOOPBACK);  //回环模式,波特率500Kbps
                        CAN_Config();
                       
                        if(mode==0)//普通模式,需要2个开发板
                        {
                                printf("\r\n\r\n普通模式");            
                        }else //回环模式,一个开发板就可以测试了.
                        {
                                printf("\r\n\r\n回环模式");            
                        }
                }                 
                key=CAN1_Receive_Msg(canbuf);
                if(key < 9)//接收到有数据
                {                       
                        printf("\r\接收到的CAN报文ID为:0x%03X",RxHeader.StdId);//主要是这句和下面一句乱码
                        printf("\r\n接收到的CAN报文数据为:");        //显示数据
                        for(i=0;i<key;i++)
                        {                                                                            
                                printf(" %02X",canbuf);        //显示数据        //显示数据
                        }
                }
                t++;
                delay_ms(10);
                if(t==20)
                {
                        LED0=!LED0;//提示系统正在运行       
                        t=0;
                        cnt++;
                }                  
        }
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2024-1-3
在线时间
2 小时
 楼主| 发表于 2024-4-29 17:17:53 | 显示全部楼层
要是一直乱码也好,关键是按键发送数据时,有时正常有时乱码。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2024-4-29
在线时间
3 小时
发表于 2024-4-29 19:41:12 | 显示全部楼层
cubeIDE输出也是中文乱码,英文正常发送给上位机
回复

使用道具 举报

5

主题

292

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1475
金钱
1475
注册时间
2018-11-28
在线时间
196 小时
发表于 2024-4-30 14:58:27 | 显示全部楼层
有可能是按键操作,打乱发送数据。可以把程序改一下,发送数据时,按键操作无效
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-8 00:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表