串口控制器初始化关键步骤
  (1)初始化串口的Tx和Rx引脚所对应的GPIO(查原理图可知Rx和Rx分别对应GPA0_1和GPA0_0)
  (2)GPA0CON(0xE0200000),bit[3:0] = 0b0010 bit[7:4] = 0b0010
  (3)初始化这几个关键寄存器UCON0 ULCON0 UMCON0 UFCON0 UBRDIV0 UDIVSLOT0
主要的几个寄存器
  (1)ULCON0 = 0x3 // 0校验位、8数据位、1停止位
  (2)UCON = 0x5 // 发送和接收都是polling mode
  (3)UMCON0 = 0x0 // 禁止modem、afc
  (4)UFCON0 = 0x0 // 禁止FIFO模式
  (5)UBRDIV0和UDIVSLOT0和波特率有关,要根据公式去算的

波特率的计算和设置
  (1)第一步,用PCLK_PSYS和目标波特率去计算DIV_VAL: DIV_VAL = (PCLK / (bps x 16)) ?1
  (2)第二步,UBRDIV0寄存器中写入DIV_VAL的整数部分
  (3)第三步,用小数部分*16得到1个个数,查表得uBDIVSLOT0寄存器的设置值

#define GPA0CON        0xE0200000
#define UCON0         0xE2900004
#define ULCON0         0xE2900000
#define UMCON0         0xE290000C
#define UFCON0         0xE2900008
#define UBRDIV0     0xE2900028
#define UDIVSLOT0    0xE290002C#define UTRSTAT0    0xE2900010
#define UTXH0        0xE2900020
#define URXH0        0xE2900024    #define rGPA0CON    (*(volatile unsigned int *)GPA0CON)
#define rUCON0        (*(volatile unsigned int *)UCON0)
#define rULCON0        (*(volatile unsigned int *)ULCON0)
#define rUMCON0        (*(volatile unsigned int *)UMCON0)
#define rUFCON0        (*(volatile unsigned int *)UFCON0)
#define rUBRDIV0    (*(volatile unsigned int *)UBRDIV0)
#define rUDIVSLOT0    (*(volatile unsigned int *)UDIVSLOT0)
#define rUTRSTAT0    (*(volatile unsigned int *)UTRSTAT0)
#define rUTXH0        (*(volatile unsigned int *)UTXH0)
#define rURXH0        (*(volatile unsigned int *)URXH0)
//串口初始化
void uart_init()
{    //初始化rx tx对应GPIO引脚rGPA0CON&=~(0xff<<0);//将 bit0~7清零rGPA0CON|=0x22;        //设置 _0 _1引脚为RX TX//串口相关寄存器rULCON0=0x3;rUCON0=0x5;rUMCON0=0;rUFCON0=0;//波特率计算相关/*     //9600rUBRDIV0=433;rUDIVSLOT0=0x2222;*///用66.7MHZ算  //115200//66700000/(115200*16)-1rUBRDIV0=35;// rUBRDIV0余数*16 然后查表rUDIVSLOT0=0x0888;
}
//串口发送一字节
void uart_putc(char c)
{    while(!(rUTRSTAT0&(1<<1)));//等待发送结束rUTXH0=c;
}
char uart_getc()
{while(!(rUTRSTAT0&(1<<0)));//等待发送结束return rURXH0;
}

2.移植stdio(部分代码展示)

int printf(const char *fmt, ...)
{int i;int len;va_list args;va_start(args, fmt);len = vsprintf(g_pcOutBuf,fmt,args);va_end(args);for (i = 0; i < strlen(g_pcOutBuf); i++){putc(g_pcOutBuf[i]);}return len;
}int scanf(const char * fmt, ...)
{int i = 0;unsigned char c;va_list args;while(1){c = getc();putc(c);if((c == 0x0d) || (c == 0x0a)){g_pcInBuf[i] = '\0';break;}else{g_pcInBuf[i++] = c;}}va_start(args,fmt);i = vsscanf(g_pcInBuf,fmt,args);va_end(args);return i;
}

Makefile

CC        = arm-linux-gcc
LD         = arm-linux-ld
OBJCOPY    = arm-linux-objcopy
OBJDUMP    = arm-linux-objdump
AR        = arm-linux-arINCDIR    := $(shell pwd)
# C预处理器的flag,flag就是编译器可选的选项
CPPFLAGS    := -nostdlib -nostdinc -I$(INCDIR)/include
# C编译器的flag
CFLAGS        := -Wall -O2 -fno-builtin#导出这些变量到全局,其实就是给子文件夹下面的Makefile使用
export CC LD OBJCOPY OBJDUMP AR CPPFLAGS CFLAGSobjs := start.o led.o clock.o uart.o main.o
objs += lib/libc.auart.bin: $(objs)$(LD) -Tlink.lds -o uart.elf $^$(OBJCOPY) -O binary uart.elf uart.bin$(OBJDUMP) -D uart.elf > uart_elf.disgcc mkv210_image.c -o mkx210./mkx210 uart.bin 210.binlib/libc.a:cd lib;    make;    cd ..%.o : %.S$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $< -c%.o : %.c$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $< -cclean:rm *.o *.elf *.bin *.dis mkx210 -fcd lib; make clean; cd ..

转载于:https://www.cnblogs.com/PengfeiSong/p/6352816.html

X210串口配置与stdio移植相关推荐

  1. S3C2440 GPS串口配置以及数据读写

    S3C2440 GPS串口配置以及数据读写 参考文章:http://www.cnblogs.com/jason-lu/articles/3173988.html       http://www.cn ...

  2. 嵌入式蓝桥杯G431RBT6 串口配置及使用方法cube MX

    打开System Core点击SYS 打开可连续写入 选用外部时钟 打开串口一 开启异步输出模式 配置参数 无需更改参数 波特率默认为115200 若比赛规定传输速率可自行更改 查看原理图可知USAR ...

  3. 树莓派串口配置(c++)

    文章目录 前言 一.wiringPi库是什么? 二.使用步骤 1.安装库和接口介绍 2.C++串口配置 总结 注意点: 前言 最近做项目,在树莓派上用到串口来实现通信功能.所以用c++写了个串口的配置 ...

  4. ROS笔记(39) 串口配置

    ROS笔记(39) 串口配置 1. 前言 2. 串口通讯 3. C++配置 3.1. 安装serial 3.2. 配置 3.3. 编译 3.4. 通讯测试 4. Python配置 4.1. 安装pys ...

  5. 树莓派3b+串口配置

    前言 树莓派从大的方向来说一共出了3代,每一代的CPU外设基本相同,但内核不同,外设里面一共包含两个串口,一个称之为硬件串口(/dev/ttyAMA0),一个称之为mini串口(/dev/ttyS0) ...

  6. 小草手把手教你 LabVIEW 串口仪器控制——VISA 串口配置

    建议大家按我发帖子的顺序来看,方便大家理解.请不要跳跃式的阅读.很多人现在看书,都跳跃式的看,选择性的看,导致有些细节的部分没有掌握到,然后又因为某个细节耽误很多时间.以上只是个人建议,高手可以略过本 ...

  7. novatel oem7 串口配置软件 程序说明1

    适合初学者 软件下载地址 comtestnovateloem7串口配置软件指令学习软件数据处理分析软件-C#文档类资源-CSDN下载 显示串口数据时,最好用定时更新的方式,在加上异步委托,避免界面卡死 ...

  8. 【STM32CubeMx你不知道的那些事】第三章:STM32CubeMx串口配置(中断接收)

    在嵌入式环境中,串口通信是必不可少的通信方式,这一章我们主要是讲解一下HAL库怎么应用串口外设做收发功能. 一.准备工作 1.使用我们第一章配置好工程文件.如图 2.明确原理图上面所需要的串口,这里我 ...

  9. 树莓派3B 串口配置教程

    前言 修改配置 串口测试 1.前言 树莓派CPU内部有两个串口,一个是硬件串口(官方称为PL011 UART),一个是迷你串口(官方成为mini-uart).在树莓派2B/B+这些老版树莓派上,官方设 ...

最新文章

  1. python写一个通讯录step by step V3.0
  2. 委托(一个主窗体统计多个从窗体的按钮单击的次数)
  3. Android学习笔记(1)----播放音乐文件
  4. 汇编: 使用[bx]代替[0]获取内存数据
  5. word2vec的通俗理解
  6. Hive引擎改为Tez笔记
  7. Android Paint 画笔使用详解 Android自定义View(六)
  8. Proxy(代理,拦截器),Reflect(反射)
  9. JAVA集合容器源码解析
  10. AD 软件的学习--基本操作
  11. 自响应式企业网站源码MVC源码
  12. 2019ZIF郑州工博会 盛大起航
  13. python PNG图片显示
  14. 超级经典回帖专用语(转载)
  15. NAT技术与代理服务器调研
  16. fluent6.3如何制作动画
  17. 百度搜索引擎结果网址参数搜索历史记录(rsv_sug)
  18. android 创建多个闹钟,Android设置多个闹钟
  19. 打开win10应用商店,提示管理员已阻止这个应用
  20. 乐观锁、悲观锁、分布式锁的概念及实现

热门文章

  1. jacoco统计server端功能测试覆盖率
  2. MapReduce执行WordCount操作
  3. Linux下Nginx访问web目录提示403Forbidden
  4. select标签中option的显示隐藏控制(兼容IE)
  5. bzoj 1753: [Usaco2005 qua]Who's in the Middle【排序】
  6. shell脚本学习(一):shell脚本开发的基本规范和习惯
  7. 译:Google的大规模集群管理工具Borg(二)------ Borg架构
  8. win7 ghost 纯净版最新系统下载
  9. C#自定义ConfigSections节点操作
  10. IOS动态库打包导入工程报错Library not loaded: @rpath/SwiftFrame.framework/SwiftFrame