当前位置: 首页 > news >正文

[AI8051U入门第三步]串口1使用-printf重定向(乱码解决办法)

前言

学习目标:
1、学习UART使用
2、printf重定向

一、串口介绍?

AI8051U 微控制器在传统8051串口(UART)基础上进行了多项增强,提供了更灵活的串行通信能力。以下是AI8051U串口的主要特点和功能:

基本串口资源
AI8051U通常包含以下串口资源:

2个增强型全双工UART(UART0和UART1)

支持硬件流控制(部分型号)

可配置的波特率发生器

主要特性
兼容性:

完全兼容标准8051的UART功能

保留传统的SBUF、SCON等寄存器

增强功能:

更高的最大波特率(可达系统时钟的1/4)

独立的波特率发生器,不依赖定时器

更灵活的中断配置

工作模式:

模式0:同步移位寄存器模式(半双工)

模式1:8位UART,可变波特率

模式2:9位UART,固定波特率

模式3:9位UART,可变波特率

高级特性
波特率配置:

16位波特率发生器,精度更高

支持非常低的波特率(适用于低速应用)

支持高速通信(最高可达1Mbps以上)

中断系统:

独立的发送和接收中断

可配置的优先级

帧错误检测中断

硬件流控制:

支持RTS/CTS硬件流控制(部分型号)

减少软件开销,提高可靠性

多缓冲技术:

部分型号支持接收FIFO缓冲

降低数据丢失风险

寄存器概述
主要控制寄存器:

SCON:串口控制寄存器

SBUF:串口数据缓冲器

PCON:电源控制寄存器(包含波特率加倍位SMOD)

AUXR:辅助寄存器(增强功能配置)

SADDR和SADEN:从机地址寄存器(多机通信用)

二、寄存器介绍

在这里插入图片描述
首先是SCOM寄存器,这里我们将SM0/FE实则成模式1在将TB8置‘1’
其他不动

/********************************** 
*功能:串口一初始化
*形参:unsigned long bar 波特率 (推荐设置成115200)
*时间:2025/7/14
*作者:单片有机机
**********************************/
void Uart1_Init(unsigned long bar){//计算波特率unsigned long Uart1_TM =0;	Uart1_TM =(65536 -(Sysclk/bar+2)/4);//   #if HTTP_DBUG  //当HTTP_DBUG为1时则用串口一,并打开服务器的printfS1_S1=0;S1_S0=0; //使用P3.0,P3.1  
//   #else
//		S1_S1=0;
//		S1_S0=1; //使用P3.6,P3.7  		
//   #endifSCON=0x50;REN=1;    //开启串口1的接收S1BRT =1;T2L  = Uart1_TM;   //波特率T2H  = Uart1_TM>>8;//AUXR |= 0x14;	//定时器2时钟1T模式,开始计时T2x12 =1;  //使用定时器2T2R =1;UAR1.rx1_len =0;UAR1.busy =0;//清空忙碌标志位ES=1;  //开启串口1中断EA=1;}

三、串口乱码设置

1、先确定波特率是否正确
2、在确定转换的晶振频率是否正确,如果还是乱码则进行一下操作
STEP1:先点击魔术棒在点击‘target’在按照下面进行设置
在这里插入图片描述

四、串口代码展示

uart.c

#include "uart.h"
#include "system.h"struct UART1 UAR1;//调用结构体
/********************************** 
*功能:串口一初始化
*形参:unsigned long bar 波特率 (推荐设置成115200)
*时间:2025/7/14
*作者:单片有机机
**********************************/
void Uart1_Init(unsigned long bar){//计算波特率unsigned long Uart1_TM =0;	Uart1_TM =(65536 -(Sysclk/bar+2)/4);//   #if HTTP_DBUG  //当HTTP_DBUG为1时则用串口一,并打开服务器的printfS1_S1=0;S1_S0=0; //使用P3.0,P3.1  
//   #else
//		S1_S1=0;
//		S1_S0=1; //使用P3.6,P3.7  		
//   #endifSCON=0x50;REN=1;S1BRT =1;T2L  = Uart1_TM;T2H  = Uart1_TM>>8;//AUXR |= 0x14;	//定时器2时钟1T模式,开始计时T2x12 =1;T2R =1;UAR1.rx1_len =0;UAR1.busy =0;//清空忙碌标志位ES=1;EA=1;}
/********************************** 
*功能:串口一发送1byte数据
*形参:无
*时间:2025/7/14
*作者:单片有机机
**********************************/
void Uart1_Putc(unsigned char dat)
{while(UAR1.busy);UAR1.busy=1;SBUF=dat;
}
/********************************** 
*功能:串口一发送多字节数据
*形参:无
*时间:2025/7/14
*作者:单片有机机
**********************************/
void Uart1_Putc_Num(unsigned char dat[],unsigned short Send_Num)
{int Send_Number1 =0;for(Send_Number1=0;Send_Number1<Send_Num;Send_Number1++){Uart1_Putc(dat[Send_Number1]);}	
}
/********************************** 
*功能:串口一中断回调函数
*形参:无
*时间:2025/7/14
*作者:单片有机机
**********************************/
void USART1_BackCall_IRQ(void) interrupt 4
{if(RI){ //串口一接收中断RI=0;if(UAR1.rx1_len <255){UAR1.buff1[UAR1.rx1_len++]=SBUF;//UAR1.rx1_len =0;//UAR1.rx1_flag =1; //接收完成标志位}UAR1.timeOut =20;     			}if(TI){//串口一发送中断TI=0;UAR1.busy =0;}
} 
/********************************** 
*功能:串口一重定向
*形参:无
*时间:2025/7/14
*作者:单片有机机
**********************************/
char putchar(char c)//串口重定向
{Uart1_Putc(c);return c;
}

uart.h

#ifndef __uart_H
#define __uart_H
#include <AI8051U.H>struct UART1{unsigned char buff1[64];unsigned char rx1_flag;unsigned char rx1_len;unsigned char busy;unsigned char timeOut;
};
extern struct UART1 UAR1;
void Uart1_Init(unsigned long bar);
void Uart1_Putc(unsigned char dat);
void Uart1_Putc_Num(unsigned char dat[],unsigned short Send_Num);
char putchar(char c);//串口重定向;#endif

main.c

/********************************** (C) COPYRIGHT ******************************** File Name          : Main.c* Author             : 单片有机机* Version            : V1.0* Date               : 2025/07/14* Description        : 串口打印数据* Hardware           : RX     P30TX     P31 * Frequency          : 33.1776Mhz
*******************************************************************************/
#include <AI8051U.H>
#include "system.h"
#include "uart.h"void main(void){GPIO_Init();Uart1_Init(115200);delay_ms(100);printf("hello,单片有机机\r\n");while(1){delay_ms(500);printf("hello\r\n");}
}

在这里插入图片描述


总结

完整代码请在我的资源里面进行下载


文章转载自:
http://bulimia.dxwdwl.cn
http://californicate.dxwdwl.cn
http://cartesianism.dxwdwl.cn
http://ahungered.dxwdwl.cn
http://chancriform.dxwdwl.cn
http://bis.dxwdwl.cn
http://brasflia.dxwdwl.cn
http://bennett.dxwdwl.cn
http://algeria.dxwdwl.cn
http://beaucoup.dxwdwl.cn
http://cardamom.dxwdwl.cn
http://audible.dxwdwl.cn
http://cadetcy.dxwdwl.cn
http://chained.dxwdwl.cn
http://centimeter.dxwdwl.cn
http://adenase.dxwdwl.cn
http://bacchant.dxwdwl.cn
http://cheers.dxwdwl.cn
http://bootprint.dxwdwl.cn
http://alcoholization.dxwdwl.cn
http://atlantean.dxwdwl.cn
http://baconianism.dxwdwl.cn
http://bode.dxwdwl.cn
http://brewing.dxwdwl.cn
http://chokebore.dxwdwl.cn
http://bobotie.dxwdwl.cn
http://alluvium.dxwdwl.cn
http://amritsar.dxwdwl.cn
http://bronzy.dxwdwl.cn
http://camion.dxwdwl.cn
http://www.dtcms.com/a/281200.html

相关文章:

  • Django+Celery 进阶:动态定时任务的添加、修改与智能调度实战
  • Android target34升级到35中的edge-to-edge适配
  • Nestjs框架: 数据库架构设计与 NestJS 多 ORM 动态数据库应用与连接池的配置
  • 利用android studio,对图片资源进行二次压缩
  • 基于Ruoyi和PostgreSQL的统一POI分类后台管理实战
  • 三步把餐饮回访差评变口碑
  • java+vue+SpringBoot在线租房和招聘平台(程序+数据库+报告+部署教程+答辩指导)
  • Ajax原理、用法与经典代码实例
  • TCP协议可靠性设计的核心机制与底层逻辑
  • 基于YOLOv8的水稻叶片病害检测系统的设计与实现【近6W条数据集+多病害特征+高准确率】
  • 修改系统配置后,如何编写 Python 脚本以适应 SSL 证书验证的变化
  • Axios 和 Promise 区别对比
  • C语言---自定义类型(下)(枚举和联合类型)
  • 利用DeepSeek为chdb命令行客户端添加输出重定向和执行SQL脚本功能
  • nlp论文:分本分类:《Bag of Tricks for Efficient Text Classification》
  • VirtualBox网络配置全指南:桥接、Host-Only与双网卡实战
  • 2025华为ODB卷-士兵过河-三语言题解
  • 限制apk使用时长第二篇-限制/拦截Apk启动-应用锁功能
  • 创客匠人:创始人 IP 变现,从 “单点尝试” 到 “生态赋能” 的跨越
  • S7-200 SMART PLC:不同CPU及数字量 IO 接线全解析
  • ESLint 配置错误:ReferenceError: prettier is not defined 解决方案
  • 运维技术教程之Jenkins上的known_hosts文件
  • 高频高密度趋势下磁芯材料评价指标探讨
  • UVM(1)—配置环境
  • 算法学习day16----Python数据结构--模拟队列
  • 传统三层网络架构和现代数据中心网络架构(如思科 ACI 的 Spine-Leaf 架构)的对比和分析(Grok3 回答)
  • Mac电脑上无需卸载即可切换使用多个EasyConnect客户端的解决方案
  • Docker安装升级redis,并设置持久化
  • 使用 sudo iftop -i 分析服务器带宽使用情况
  • 一文读懂语义解析技术:从规则到神经网络的演进与挑战