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

电商网站开发 报价windows优化大师官方免费

电商网站开发 报价,windows优化大师官方免费,天堂 最新版中文在线,响应式网站建设必推全网天下目录 1 UART帧格式详解 1.1 UART简介 1.2 通信基础 - 并行和串行 1.3 通信基础 - 单工和双工 1.4 通信基础 - 波特率 1.5 UART帧格式 2 Exynos4412下的UART控制器 2.1 引脚功能设置 2.2 阅读芯片手册 3 UART寄存器详解 3.1 引脚寄存器 3.2 串口寄存器概览 3.3 ULC…

目录

1 UART帧格式详解

1.1 UART简介

1.2 通信基础 - 并行和串行

1.3 通信基础 - 单工和双工

1.4 通信基础 - 波特率 

1.5 UART帧格式

2 Exynos4412下的UART控制器

2.1 引脚功能设置

2.2 阅读芯片手册

3 UART寄存器详解

3.1 引脚寄存器

3.2 串口寄存器概览

3.3 ULCONn(帧格式) 

​编辑 3.4 UCONn控制寄存器(串口模式轮询、中断、DMA)

3.5 状态寄存器 

3.6 接收数据,发送数据的寄存器 

3.7 设置波特率

4 UART编程

4.1 interface.c实验代码

4.2 printf重定向

4.3 练习


1 UART帧格式详解

1.1 UART简介

Universal Asynchronous Receiver Transmitter 即     通用异步收发器,是一种通用的串行、异步通信总线     该总线有两条数据线,可以实现全双工的发送和接收     在嵌入式系统中常用于主机与辅助设备之间的通信

1.2 通信基础 - 并行和串行

并行通讯(多个数据线一起发送)

串行通信(一个个字节发送)

1.3 通信基础 - 单工和双工

半双工要不能同时发送和接收,全双工可以同时发送和接收。

1.4 通信基础 - 波特率 

波特率用于描述UART通信时的通信速度,其单位为bps(bit per second)即每秒钟传送的bit的数量

1.5 UART帧格式

串口协议中规定,先发低位再发高位

例:数据0x55 二进制01010101->发送顺序10101010

校验位很少使用,多发了一位数据,会使得通讯速度变慢

如果发送多个字节重复上面的动作,必须一个一个字节发送,附带停止位和起始位,否则发送0xFF这种数据,全是高电平,无法得知是发送了还是没发送。

串口发送的速率是根据自身的时钟速率掐时间计算。如A主机发送速率1s1个,但是接收方可能接收的数据对于A来说是0.9S1个,时间一长数据会乱。所以一般规定每次最多发8位,之后重新获取起始位,避免误差增大。

2 Exynos4412下的UART控制器

一般情况下处理器中都会集成UART控制器 我们使用UART进行通信时候只需对其内部的相 关寄存器进行设置即可

2.1 引脚功能设置

查看扩展板原理图

SP3232EEA芯片的作用是把串口发出来的TTL信号转换成232信号,增加了串口的通讯距离

查看核心板原理图 

2.2 阅读芯片手册

芯片手册4412一共包含了5个串口通道,包含一个可以与GPS通讯的Ch4。串口控制器的时钟是100Mhz,支持DMA,串口中断,每个串口包含FIFO。

 

功能框图

总线是CPU与串口芯片相连,发送、接收及访问控制单元。

红外GPS暂不详细介绍

3 UART寄存器详解

3.1 引脚寄存器

3.2 串口寄存器概览

5个串口寄存器内部是一样的,使用串口2基地址0x1382_0000

3.3 ULCONn(帧格式) 

 3.4 UCONn控制寄存器(串口模式轮询、中断、DMA)

 

接收串口数据一般有3种方式:

1.轮询,定期CPU去访问FIFO

2.中断,有数据来了通知CPU去读取

3.DMA,有数据来了直接由DMA搬到内存中,不需要CPU去干涉

3.5 状态寄存器 

状态寄存器中一般为只读寄存器,可用于判断串口接收发送的状态

3.6 接收数据,发送数据的寄存器 

3.7 设置波特率

波特率公式,案例用的时钟频率是40Mhz,我们开发板的串口时钟寄存器是100Mhz

UBRDIVn = 20(整数部分)

UFRACVAL =0.7(小数部分)*16 ≈ 11(四舍五入),因为串口按位发送会校准所以可以忽略

4 UART编程

 引脚寄存器

帧格式 

接收和发送模式为轮询 

100000000/(115200 *16)-1 ≈ 53.25

UBDIV2 = 取整 = 53

UFRAVVAL2 = 0.25 * 16 = 4

4.1 interface.c实验代码


#include "exynos_4412.h"void UART_Init(void)
{/*1.将GPA1_0和GPA1_1设置成UART2的接收和发送引脚 GPA1CON[7:0]*/GPA1.CON = GPA1.CON & (~(0xFF << 0)) | (0x22 << 0);/*2.设置UART2的帧格式 8位数据位 1位停止位 无校验 正常模式 ULCON2[6:0]*/UART2.ULCON2 = UART2.ULCON2 & (~(0x7F << 0)) | (0x3 << 0);/*3.设置UART2的接收和发送模式为轮询模式 UCON2[3:0]*/UART2.UCON2 = UART2.UCON2 & (~(0xF << 0)) | (0x5 << 0);/*4.设置UART2的波特率为115200 UBRDIV2/UFRACVAL2*/UART2.UBRDIV2 = 53;UART2.UFRACVAL2 = 4;
}void UART_Send_Byte(char Dat)
{/*等待发送寄存器为空,即上一个数据已经发送完成 UTRSTAT2[1]*/while(!(UART2.UTRSTAT2 & (1 << 1)));/*将要发送的数据写入发送寄存器 UTXH2*/UART2.UTXH2 = Dat;
}char UART_Rec_Byte(void)
{char Dat = 0;/*判断接收寄存器是否接收到了数据 UTRSTAT2[0]*/if(UART2.UTRSTAT2 & 1){/*从接收寄存器中读取接收到的数据 URXH2*/Dat = UART2.URXH2;return Dat;}else{return 0;}
}void UART_Send_Str(char * pstr)
{while(*pstr != '\0')UART_Send_Byte(*pstr++);
}int main()
{char RecDat = 0;UART_Init();while(1){RecDat = UART_Rec_Byte();if(RecDat == 0){}else{RecDat = RecDat + 1;UART_Send_Byte(RecDat);}UART_Send_Str("Hello World\n");//重定向的printfprintf("Hello World\n");}return 0;
}

注:

寄存器只能显示字符,无法显示数字,如果需要发送和接收数字要转换为对应的字符的ASCII码 

如果CPU写入的速度过快,超过串口发送器发送的速度会使得接收端的数据错乱。需要对发送状态寄存器进行判断后进行发送和接收。

4.2 printf重定向

printf的功能实现已经再src中实现了,函数比较复杂,不做详细介绍

printf调用了puts,puts内部调用了putc,我们修改了putc的程序实现了重定向

定向功能在uart.c中实现。

printf的区别

1来源:没有操作系统在printf.c中,而有操作系统是调用的C库的区别

2输出定向不一样:重定向输出到串口,输出到linux终端

4.3 练习

1.若使用UART协议发送一个字节的数据0x63,画出信号线上的时序图

注:8位数据位、无校验位、一位停止位



2.编程实现电脑远程控制LED状态

注:在终端上输入‘2’,LED2点亮,再次输入‘2’,LED2熄灭... ...


#include "exynos_4412.h"void LED_Init(void)
{GPX2.CON = GPX2.CON & (~(0xF << 28)) | (0x1 << 28); //LED2 GPX2_7 output//GPX1.CON = GPX1.CON & (~0xF) | 0x1;                 //LED3 GPX1_0 output//GPF3.CON = GPF3.CON & (~(0xF << 16)) | (0x1 << 16); //LED4 GPF3_4 output//GPF3.CON = GPF3.CON & (~(0xF << 20)) | (0x1 << 20); //LED5 GPF3_5 output
}void Led_on(int num){switch(num){case 2:GPX2.DAT = GPX2.DAT | (1 << 7);case 3:GPX1.DAT = GPX1.DAT | (1 << 0);case 4:GPF3.DAT = GPF3.DAT | (1 << 4);case 5:GPF3.DAT = GPF3.DAT | (1 << 5);default:break;}}void Led_off(int num){switch(num){case 2:GPX2.DAT = GPX2.DAT & ~(1 << 7);case 3:GPX1.DAT = GPX1.DAT & ~(1 << 0);case 4:GPF3.DAT = GPF3.DAT & ~(1 << 4);case 5:GPF3.DAT = GPF3.DAT & ~(1 << 5);default:break;}}void UART_Init(void)
{/*1.将GPA1_0和GPA1_1设置成UART2的接收和发送引脚 GPA1CON[7:0]*/GPA1.CON = GPA1.CON & (~(0xFF << 0)) | (0x22 << 0);/*2.设置UART2的帧格式 8位数据位 1位停止位 无校验 正常模式 ULCON2[6:0]*/UART2.ULCON2 = UART2.ULCON2 & (~(0x7F << 0)) | (0x3 << 0);/*3.设置UART2的接收和发送模式为轮询模式 UCON2[3:0]*/UART2.UCON2 = UART2.UCON2 & (~(0xF << 0)) | (0x5 << 0);/*4.设置UART2的波特率为115200 UBRDIV2/UFRACVAL2*/UART2.UBRDIV2 = 53;UART2.UFRACVAL2 = 4;
}void UART_Send_Byte(char Dat)
{/*等待发送寄存器为空,即上一个数据已经发送完成 UTRSTAT2[1]*/while(!(UART2.UTRSTAT2 & (1 << 1)));/*将要发送的数据写入发送寄存器 UTXH2*/UART2.UTXH2 = Dat;
}char UART_Rec_Byte(void)
{char Dat = 0;/*判断接收寄存器是否接收到了数据 UTRSTAT2[0]*/if(UART2.UTRSTAT2 & 1){/*从接收寄存器中读取接收到的数据 URXH2*/Dat = UART2.URXH2;return Dat;}else{return 0;}
}void UART_Send_Str(char * pstr)
{while(*pstr != '\0')UART_Send_Byte(*pstr++);
}int main()
{char RecDat = 0;int toggle = 0;UART_Init();LED_Init();while(1){RecDat = UART_Rec_Byte();if(RecDat == '2'){if(toggle == 0){Led_on(2);toggle = 1;}else{Led_off(2);toggle = 0;}}/*UART_Send_Str("Hello World\n");*/}return 0;
}

http://www.khdw.cn/news/50966.html

相关文章:

  • 销售网站平台怎么做的搜索引擎优化哪些方面
  • 长春网站建设报价国产免费crm系统有哪些
  • 阜阳手机网站建设中国十大电商平台有哪些
  • c 2015 做网站怎样做竞价推广
  • 站建设培训学校快推广app下载
  • 网站建设的基本元素东莞整站优化推广公司找火速
  • 400电话西安网站制作 彩铃制作平台营销策略
  • 网站开发图片多打开速度慢沧州网站seo公司
  • 福建建设资格执业注册管理中心网站经典软文案例标题加内容
  • 怎么让别人访问自己做的的网站138ip查询网域名解析
  • 网线制作线序网站排名优化公司哪家好
  • 十大免费剪辑软件下载内江seo
  • html5企业网站带后台厦门百度广告开户
  • 执法局网站建设目的seo资源咨询
  • 江苏省苏州市姑苏区疫情优化最狠的手机优化软件
  • 网站建设的策划方案百度学术论文查重免费
  • 宁夏网站建设价格在线一键生成网页
  • 做网站运用的技术线上免费推广平台都有哪些
  • 电子商务网站建设与管理实训总结seo基础课程
  • 芙蓉建设官方网站aso具体优化
  • 自己做装修网站需要多少钱构建新发展格局
  • 网站开发好的公司推荐免费推广网站视频
  • 关联网站有那些seo广告投放
  • 做企业网站一般要多少钱网络推广的基本渠道
  • 网站备案号链接上海百度关键词搜索推广服务
  • 免费一键搭建发卡网seo网站优化助理
  • 做新闻网站数据在线生成网页网站
  • 如何做好网站推广百度客服转人工
  • 四川高速公路建设开发集团有限公司网站南京seo网站优化
  • 如何快速用手机做网站微信搜一搜seo优化