实验3  UART实验

  1. 总线相关概念

UART:Universal Asynchronous Receiver and Transmitter (UART) :

通用的异步接收器和发送器/通用的异步串行总线

总线的分类:

按总线的通信方式:

串行总线:数据在总线上发送器一个时钟周期发送一位数据,

接收器一个时钟周期接收一位数据。

并行总线:数据在总线上发送器一个时钟周期发送多位数据,

接收器一个时钟周期接收多位数据。

串行和并行的优缺点

串行:节约资源,传输速度慢   IIC  UART SPI CAN  485

并行:浪费资源,传输速度快   LCD屏

数据的的传输方向:

时钟划分:同步总线和异步总线

UART总线的硬件连接:

串口在开发中主要作用:实现开发板和PC端数据的交互, 最大传输距离15米

  1. UART总线的通信协议

  1. 分析电路图

SP3232EEN:电平转换芯片,可以将RS232电平转换为TTL电平

或者将TTL电平转换为RS232电平。

SOC引脚默认使用TTL电平:

0V ---》0

3.3V----》1

串口使用RS232电平:

-3 ~ -15V  ----》 1

+3 ~ +15  ----》 0

  1. 分析芯片手册

GPIO章节:设置GPIOD14和GPIOD18引脚位UART功能。

UART章节:中午抽时间自己先翻译一下串口章节。下午继续讲解。

ULCONn:指定串口的数据帧格式。

UCONn:串口控制寄存器:设置串口的发送模式和接收模式,采用轮训模式

UTXHn:发送数据寄存器

URXHn:接收数据寄存器

UBRDIVn:波特率分频值的整数部分

UFRACVAL:波特率分频值的小数部分

本开发板上的UART使用EXT_UCLK作为时钟源,时钟的频率是50MHz。

UBRDIV = 26;

UFRACVAL = 2;      1/2/3都可以。

数据在传输的过程中会造成误差的基类。停止位的作用可以校准时钟。

停止位越多校准的时钟越准确。

UTRSTATn:串口发送和接收状态寄存器

UTRSTAT[1]:判断发送缓冲区是否为空,如果发送缓冲区不为空,

等待发送缓冲区为空之后,在向UTXH中写入数据。

UTRSTAT[0]:判断接收缓冲区是否有有效的数据,如果接收缓冲区没有有效数据,

等待接收缓冲区有效的数据之后,在从URXH中读取数据。

编写代码

main.c


#include "led.h"
#include "pwm.h"
#include "delay.h"
#include "uart0.h"
int main()
{hal_led_init();
//  hal_pwm_init();hal_uart_init();Tri_String("UART Test\n");while(1){Tri_Byte(Recv_Byte()+1);
//      printf("pwm test!\n");// led_flash(500);
//      hal_pwm_switch(299, 149, ON);
//      delay_ms(1000);
//      hal_pwm_switch(299, 149, OFF);
//      delay_ms(1000);}return 0;
}

uart0.c

#include "uart0.h"void hal_uart_init(void)
{// 1. 设置GPIO14引脚和GPIO18引脚位串口功能GPIOD.ALTFN0 &= (~(0x3 << 28));GPIOD.ALTFN0 |= (0x1 << 28);GPIOD.ALTFN1 &= (~(0x3 << 4));GPIOD.ALTFN1 |= (0x1 << 4);// 2. 设置串口数据帧的格式:8N1    ULCON// 正常模式  8位数据位 无校验位,1个停止位UART0.ULCON &= (~(0x1 << 6));UART0.ULCON &= (~(0x7 << 3));UART0.ULCON &= (~(0x1 << 2));UART0.ULCON |= (0x3 << 0);// 3. 设置串口的波特率 115200   UBRDIV  UFRACVALUART0.UBRDIV = 26;UART0.UFRACVAL = 2;// 4. 设置串口发送和接收模式:轮询模式  UCONUART0.UCON &= (~0xF);UART0.UCON |= 0x5;
}// 发送一个字节的函数
void Tri_Byte(char ch)
{// 判断发送缓冲区是否为空,如果发送缓冲区不为空,//则等待发送缓冲区为空  UTRSTAT[1]while(!(UART0.UTRSTAT & (1 << 1)));// 发送数据   UART0.UTXH = ch;if(ch == '\n')Tri_Byte('\r');
}// 接收一个字节的函数
char Recv_Byte(void)
{char ch;// 判断接收缓冲区是否有有效数据,如果接收缓冲区没有有效数据,// 则等待接收缓冲区有有效的数据  UTRSTAT[0]while(!(UART0.UTRSTAT & (1 << 0)));//接收数据ch = UART0.URXH;return ch;
}// 发送字符串的函数
void Tri_String(char *str)
{// 判断是否到字符串的结尾,while(*str != '\0')// 如果没有到结尾调用Tri_Byte()函数,一个字节一个字节发送。Tri_Byte(*str++);
}

uart0.h

#ifndef __UART0_H__
#define __UART0_H__/*********************** UART ************************/typedef struct {unsigned int ULCON;unsigned int UCON;unsigned int UFCON;unsigned int UMCON;unsigned int UTRSTAT;unsigned int UERSTAT;unsigned int UFSTAT;unsigned int UMSTAT;unsigned int UTXH;unsigned int URXH;unsigned int UBRDIV;unsigned int UFRACVAL;unsigned int UINTP;unsigned int UINTS;unsigned int UINTM;
}uart;
/*************** UART0 *****************/
#define UART0 ( * (volatile uart *)0xC00A1000 )/*************** UART1 *****************/
#define UART1 ( * (volatile uart *)0xC00A0000 )/*************** UART2 *****************/
#define UART2 ( * (volatile uart *)0xC00A2000 )/*************** UART3 *****************/
#define UART3 ( * (volatile uart *)0xC00A3000 )/*************** UART4 *****************/
#define UART4 ( * (volatile uart *)0xC00AD000 )/*************** UART5 *****************/
#define UART5 ( * (volatile uart *)0xC00AF000 )void hal_uart_init(void);
void Tri_Byte(char ch);
char Recv_Byte(void) ;
void Tri_String(char *str); #endif

下载调试

ARM平台FS6818/s5p6818开发板实验3 —— UART实验相关推荐

  1. Samsung四核(ARM Cortex-A9)UT-Exynos4412开发板

    产品简介 UT-Exynos4412开发板是一款功能极为强大的高端ARM Cortex-A9开发平台,采用Samsung最新的Exynos4412(Exynos4412 Quad),主频达到1.4~1 ...

  2. arm方案商,三星S5P6818开发板ARM Cortex-A53架构

    产品简介 G6818 开发板由邮票孔核心板,底板和液晶板三大块组成,核心板采用 8 层板工艺设计, 确保稳定可靠,可以批量用于平板电脑,车机,学习机,POS机,游戏机,行业监控等多种领域.主控为Cor ...

  3. TI达芬奇系列TMS320DM8148浮点DSP C674x + ARM Cortex-A8高性能视频处理器开发板规格书

    TL8148-EasyEVM是一款广州创龙基于TI TMS320DM8148(浮点DSP C674x + ARM Cortex-A8)SOM-TL8148核心板设计的开发板,它为用户提供了SOM-TL ...

  4. 32位ARM核单片机XL32F003开发板可替代STM32、华大、GD,脚位兼容

    XL32F003开发板使用 XL32F003 作为主控制器.该开发板为采用 32 位 ARM® Cortex® -M0+ CPU 内核的单片机芯片,提供了一个简易的硬件开发环境.开发板使用 mini- ...

  5. STM32基于正点原子ALIENTEK探索者开发板的跑马灯实验

    一.首先我们来了解建立好的工程框架 1.USER 组USER下面主要存放的是用户代码. main.c是主函数 system_stm32f4xx.c文件是片上外设接入层系统文件,主要是申明设置系统及总线 ...

  6. 国产平台之T507 开发板Android 安全策略漫谈 -飞凌嵌入式

    硬件平台:飞凌嵌入式 OKT507-C开发板 操作系统:Android10.0 飞凌嵌入式 T507 开发板 Android系统版本为Android10.0,默认开启了SELinux.基于MAC访问控 ...

  7. BASYS3开发板与键盘连接实验

    数字逻辑部分的最后一篇博客.当初是为了做课设,需要用到外接键盘,但是只有一块4*4的键盘.无奈只能想到连USB接口的外接键盘.然后在网上搜了很多,找到了一篇PS/2协议外接键盘的微博.在那篇微博的基础 ...

  8. ubuntu18.04交叉编译移植OpenCV4.70和QT5.12.12至ARM64位平台LKD3588(开发板为ubuntu22.04系统)(三)

    序:前面已经将Opencv和Qt5.12.12分别交叉编译并部署至RK3588中开发板上了,并验证了在开发板上都可以顺利运行.接下来我们在PC虚拟机QT上搭建将二者结合的IDE便于开发. 一.虚拟机中 ...

  9. 基于ARM的COTEX-A9系列开发板的系统移植

    在原始的板子上是没有操作系统的,如果能够在板子上装上操作系统就可以在板子上运行程序,以linux系统为例. 一,使用TFTP服务下载操作系统文件 想要在开发板上运行操作系统得先将所需要得操作系统映像文 ...

最新文章

  1. OpenAI 发布通用人工智能研究纲领:以全人类的名义承诺
  2. 企业级监控软件Zabbix搭建部署之使用mutt+msmtp配置Zabbix邮件报警
  3. 洛谷——P1101 单词方阵
  4. java 读取excel 文件 Unable to recognize OLE stream 错误
  5. BadZipfile: File is not a zip file
  6. HTML5颜色选择器(画布)
  7. FPGA零基础学习:UART协议驱动设计
  8. 从五个维度来谈谈视觉设计师如何阐述设计风格
  9. 【微信小程序】设置画布字体
  10. gitlab项目自动同步到测试服务器
  11. 傲游 android 2.3,傲游浏览器安卓版-傲游浏览器手机版v5.2.3.3256-3454手机软件
  12. c语言和java哪个有前途_C语言和Java哪个更适合初学者?
  13. CAN总线终端电阻的作用
  14. 火狐浏览器添加自动阻止加密挖矿选项
  15. Java实现 LeetCode 488 祖玛游戏
  16. vs错误描述:fatal error C1010:在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“
  17. 他写代码如入定,人称阿里“扫地僧”
  18. 实验15:内部温度传感器实验
  19. 在cmd中安装MySQL,MySQL(桌面图标版)
  20. 2015考研英语作文万能模板,只需要写一句话填三个词 ...

热门文章

  1. 记一次 STM32 ST-Link Utility芯片擦除与程序烧写失败问题
  2. R语言-地图绘制的思路
  3. 多交互智能手套Miiglove
  4. iOS崩溃日志分析-b
  5. Golang LicenseServer授权服务器的设计 与 RSA 密钥对的应用
  6. LAMP兄弟连-就业指导视频讲座下载
  7. 假期旅行什么蓝牙耳机比较好?
  8. 文科360分能上计算机专业吗,考研考360分有多难 是什么概念
  9. 捍卫数据真实性的卫士-本福特定律
  10. 2021汤家凤强化测试10套卷【数学二】【解析】