串口控制器初始化关键步骤
  (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寄存器的设置值

  1. #define GPA0CON 0xE0200000
  2. #define UCON0 0xE2900004
  3. #define ULCON0 0xE2900000
  4. #define UMCON0 0xE290000C
  5. #define UFCON0 0xE2900008
  6. #define UBRDIV0 0xE2900028
  7. #define UDIVSLOT0 0xE290002C
  8.  
  9. #define UTRSTAT0 0xE2900010
  10. #define UTXH0 0xE2900020
  11. #define URXH0 0xE2900024
  12.  
  13. #define rGPA0CON (*(volatile unsigned int *)GPA0CON)
  14. #define rUCON0 (*(volatile unsigned int *)UCON0)
  15. #define rULCON0 (*(volatile unsigned int *)ULCON0)
  16. #define rUMCON0 (*(volatile unsigned int *)UMCON0)
  17. #define rUFCON0 (*(volatile unsigned int *)UFCON0)
  18. #define rUBRDIV0 (*(volatile unsigned int *)UBRDIV0)
  19. #define rUDIVSLOT0 (*(volatile unsigned int *)UDIVSLOT0)
  20. #define rUTRSTAT0 (*(volatile unsigned int *)UTRSTAT0)
  21. #define rUTXH0 (*(volatile unsigned int *)UTXH0)
  22. #define rURXH0 (*(volatile unsigned int *)URXH0)
  23. //串口初始化
  24. void uart_init()
  25. { //初始化rx tx对应GPIO引脚
  26. rGPA0CON&=~(0xff<<);//将 bit0~7清零
  27. rGPA0CON|=0x22; //设置 _0 _1引脚为RX TX
  28. //串口相关寄存器
  29. rULCON0=0x3;
  30. rUCON0=0x5;
  31. rUMCON0=;
  32. rUFCON0=;
  33. //波特率计算相关
  34.  
  35. /* //9600
  36. rUBRDIV0=433;
  37. rUDIVSLOT0=0x2222;
  38. */
  39. //用66.7MHZ算
  40. //115200
  41. //66700000/(115200*16)-1
  42. rUBRDIV0=;
  43. // rUBRDIV0余数*16 然后查表
  44. rUDIVSLOT0=0x0888;
  45. }
  46. //串口发送一字节
  47. void uart_putc(char c)
  48. {
  49. while(!(rUTRSTAT0&(<<)));//等待发送结束
  50. rUTXH0=c;
  51. }
  52. char uart_getc()
  53. {
  54. while(!(rUTRSTAT0&(<<)));//等待发送结束
  55. return rURXH0;
  56. }

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

  1. int printf(const char *fmt, ...)
  2. {
  3. int i;
  4. int len;
  5. va_list args;
  6.  
  7. va_start(args, fmt);
  8. len = vsprintf(g_pcOutBuf,fmt,args);
  9. va_end(args);
  10. for (i = ; i < strlen(g_pcOutBuf); i++)
  11. {
  12. putc(g_pcOutBuf[i]);
  13. }
  14. return len;
  15. }
  16.  
  17. int scanf(const char * fmt, ...)
  18. {
  19. int i = ;
  20. unsigned char c;
  21. va_list args;
  22.  
  23. while()
  24. {
  25. c = getc();
  26. putc(c);
  27. if((c == 0x0d) || (c == 0x0a))
  28. {
  29. g_pcInBuf[i] = '\0';
  30. break;
  31. }
  32. else
  33. {
  34. g_pcInBuf[i++] = c;
  35. }
  36. }
  37.  
  38. va_start(args,fmt);
  39. i = vsscanf(g_pcInBuf,fmt,args);
  40. va_end(args);
  41.  
  42. return i;
  43. }

Makefile

  1. CC = arm-linux-gcc
  2. LD = arm-linux-ld
  3. OBJCOPY = arm-linux-objcopy
  4. OBJDUMP = arm-linux-objdump
  5. AR = arm-linux-ar
  6.  
  7. INCDIR := $(shell pwd)
  8. # C预处理器的flag,flag就是编译器可选的选项
  9. CPPFLAGS := -nostdlib -nostdinc -I$(INCDIR)/include
  10. # C编译器的flag
  11. CFLAGS := -Wall -O2 -fno-builtin
  12.  
  13. #导出这些变量到全局,其实就是给子文件夹下面的Makefile使用
  14. export CC LD OBJCOPY OBJDUMP AR CPPFLAGS CFLAGS
  15.  
  16. objs := start.o led.o clock.o uart.o main.o
  17. objs += lib/libc.a
  18.  
  19. uart.bin: $(objs)
  20. $(LD) -Tlink.lds -o uart.elf $^
  21. $(OBJCOPY) -O binary uart.elf uart.bin
  22. $(OBJDUMP) -D uart.elf > uart_elf.dis
  23. gcc mkv210_image.c -o mkx210
  24. ./mkx210 uart.bin .bin
  25.  
  26. lib/libc.a:
  27. cd lib; make; cd ..
  28.  
  29. %.o : %.S
  30. $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $< -c
  31.  
  32. %.o : %.c
  33. $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $< -c
  34.  
  35. clean:
  36. rm *.o *.elf *.bin *.dis mkx210 -f
  37. cd lib; make clean; cd ..

X210串口配置与stdio移植的更多相关文章

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

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

  2. Linux下串口配置初步探寻

    一.在struct termios结构体中,对串口进行基本配置(如波特率设置,校验位和停止位设置 等). (一): struct termios   //串口的设置主要是设置struct termio ...

  3. 【STM32】STM32串口配置的一般步骤(库函数)

    STM32串口配置的一般步骤(库函数)(1)串口时钟使能:RCC_APBxPeriphClockCmd();    GPIO时钟使能:RCC_AHBxPeriphClockCmd();(2)引脚复用映 ...

  4. S5PV210_uart stdio移植

    1.stdio : standard input output 标准输入输出 2.printf函数调用到的2个关键函数: vsprintf : 格式化打印信息,最终得到纯字符串的打印信息等待输出 pu ...

  5. STM32CubeMX的串口配置,以及驱动代码

    1.STM32CubeMX的配置没啥子好说的,使能然后改一下波特率和字长,然后在将中断勾选,把中断等级调到1(一定要比systick的优先级垃圾!!!) 2.驱动代码 在生成的it.c文件中,例如用的 ...

  6. S5PV210 串口配置与实验(轮询方式)

    S5PV210 UART 相关说明 通用异步收发器简称 UART, 即 UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它用来传输串行数据.发送数据时, ...

  7. ZLG zigbee 虚拟串口配置

    一.设置网关工作模式: 在ZNetCom Utility工具中,将设置网关工作模式为 Real COM 模式 启动 ZNetCom Utility 搜索设备 获得设备信息 修改工作模式为:real c ...

  8. SVN配置使用及移植

    使用svn作为配置管理工具及其普遍的用于项目开发中,网上有很多关于svn的原理介绍及命令行管理教程.这里仅仅分享下个人配置及使用的过程,不通过命令行,可简单的上手操作.如有遗漏欢迎留言交流. 配置及使 ...

  9. STM32串口配置步骤

    串口设置的一般步骤可以总结为如下几个步骤: 1) 串口时钟使能, GPIO 时钟使能2) 串口复位3) GPIO 端口模式设置4) 串口参数初始化5) 开启中断并且初始化 NVIC(如果需要开启中断才 ...

随机推荐

  1. Open MPI集群运行

    部署完之后,代码也能正确跑起来了,也确实集群分散了.跑一下各种各样的代码,发现了一个错误: $ ~/OpenMpi/bin/mpiexec -np ~/NetWorkTest My rank is M ...

  2. 关于Filter中ServletRequest强转HttpServletRequest问题

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOE ...

  3. Automatic Judge

    Description Welcome to HDU to take part in the second CCPC girls’ competition! A new automatic judge ...

  4. 计算器软件实现系列(七)WPF+SQL+策略模式

    一  整体概述 本次设计主要是在WPF的页面中实现的,属于表现层的更换,数据库部分用的还是数据库的封装,其中引用了策略模式 二  设计思路 1 在出题页面,进行试题的编辑,在编辑后会自动保存到数据库中 ...

  5. C#操作Excel执行分类多条件汇总合并

    之前发了一片模拟合并,详见模拟Excel同一列相同值的单元格合并 在之前的文章中介绍了思想,其中Excel采用的二维数组模拟,今天花了点时间,学习了一下C#操作Excel,实现了类似的效果! 准备 需 ...

  6. .getClass()和.class的区别

    一直在想.class和.getClass()的区别,思索良久,有点思绪,然后有网上搜了搜,找到了如下的一篇文章,与大家分享. 原来为就是涉及到java的反射----- Java反射学习 所谓反射,可以 ...

  7. <Effective C++>读书摘要--Ctors、Dtors and Assignment Operators<二>

    <Item 9> Never call virtual functions during construction or destruction 1.you shouldn't call ...

  8. MVC学习笔记:入门

    1.controller/action action直接返回字符串,适用于不需要返回大量html的业务,类似一般处理程序. 如果需要返回大量html代码,需要返回view(); View文件夹中需添加 ...

  9. WIN8/8.1/10进入BIOS方法图解

    1.首先点击桌面左下角的"开始". 2.然后点击电源. 3.然后按住shift,同时点击"重启".于是进入这个画面: 4.然后点击"疑难解答" ...

  10. mysql的my.cnf配置文件

    [client]port = 3306default-character-set=utf8mb4socket = /var/run/mysqld/mysql.sock# user=david# pas ...