关键词不能为空

当前您在: 主页 > 英语 >

UART串口编程

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-27 21:27
tags:

-

2021年2月27日发(作者:止动环)


UART


串口编程





首先明确一点:我们学习的串口是异步串口。在传输时,他们 各自有各自的时钟。就是我们说的波特


率。





我们学习的


RS232



UART


的区别是,< /p>


UART


使用标准的


TTL/COMS< /p>


电平



进过一个芯片使它的高低电平



TTL



0



3.3V


变成了



低电平


5v



15v




高电平


-3v



-12v






首先说一下串口的数据帧格式。它 由一个开始位,数据位,校验位和停止位组成。





平时数据处于


1

状态。




当要开始发送时,



UART


改变


TxD


数据变成


0

状态


1


个位的时间,


在接受端到< /p>


0


之后的


1.5


位的时间,


接收端开始接受数据。





数据位分为


5



6



7



8


。四种类型的数据位。之后就是校验位站

1


位,可以设置也可以不设置。最后


的是停止位。可以是< /p>


1


位,


1.5


位 ,


2


位。这个是高电平


1









UAR T


可以用中断或


DMA


来工作。它有< /p>


3


个单独的通道。它由


4


部分组成,发送器,接收器,波特率发


生器,控制逻辑组成。

< br>




这些部分的设置都是通过寄存器来实现的。





发送的过程是这样的,

< p>
UART


只能通过


shifter


一位一位的来发数据。它先把要发的数据放到它的缓存


FIFO


里,当然缓存也可以取消。然后放入


shifter


里 面来发出去。接受也是一样的。通过缓存来接受,然


后再通过接受的

shifter


来接。





具体继电器的设置主要由以下几个:





ULCON


逻辑数据桢格式控制器





UCON


串口的控制继电器





UFCON FIFO


控制寄存器





UMCON


串口

< br>MODEN


控制器



(可以控制


AFC


自动流控制)





以下是状态寄存器,用来确定状态的,比如说


shifter


发送器的状态,接收器的状态。





UTRSTAT


接受发送控制器





UERSTAT


错误状态寄存器





UFSTAT FIFO


状态寄存器





最后一个单独的设置寄存器,它用来设置波特率





UBRDIV


波特率发生器





以下来写个简单的串口例子。





它不使用


FIFO


中断



而直接用


shifter


收发,采用轮询的方式来检测数据是否发送或被接受。然后通



minicom


向开发板发送


1


表示亮灯,发送


2


表示熄灯 。





文件 总共是


7




一个


efile




crt0.s


是关闭


watchdog


并跳转到


mian


之后用个


deadloop






.text




.globl _start




_start






ldr r0



=0x53000000 @ WATCHDOG close




mov r1



#0x0




str r1





r0






ldrsp



=1024*4 @set stack



but the capitcy of cache is only 4k




bl main




halt_loop






bhalt_loop





2


个是


addr.h


用来写寄存器的宏定义。





#ifndef ADDR_H




#define ADDR_H




#define GPECON



*



volatile unsigned int *



0x56000040





#define GPEDAT



*



volatile unsigned int *



0x56000044






#define GPE12_out


1


《《(


12*2


))





#define GPE13_out


1


《《(


13*2


))

< p>




#define GPHCON



*



volatile unsigned int *



0x56000070






#define GPHUP


(< /p>


*



volatile unsigned int *



0x56000074






#define ULCON0



*



volatile unsigned int *



0x50000000





#define UCON0



*


< br>volatile unsigned int *



0 x50000004






#define UFCON0



*



volatile unsigned int *



0x50000008






#define UMCON0



*



volatile unsigned int *



0x5000000C





#define UTRSTAT0



*


< p>
volatile unsigned int *


0x50000010






#define UFSTAT0



*



volatile unsigned int *



0x50000018






#define UTXH0



*< /p>



volatile unsigned int *

< p>


0x50000020






#define URXH0



*



vol atile unsigned int *



0x50000 024






#define UBRDIV0



*



volatile unsigned int *



0x50000028


< br>




#endif





3


个文件来写


uart.h


,这是个我们的功 能





#ifndef UART_H




#define UART_H




void uart_init


()


; //


初始化继电器





void uart_write



char *a



; //


串口写一行





void uart_read



char *a



int n



; //


串口读

< br>n


个字





void uart_read_line



char *a



; //


读一行





void led_on


()


; //


开灯





void led_off


()


; //


关灯





#endif



< br>第


4


个文件具体来写


uart. C




#include“uart.h”





#include“addr.h”





#define UART_CLK 50000000 //


我们用的是


PCLK 50MHz




#define UART_BAUD_RATE 115200 //


比特率是


115200




#define UART_BRD



int


)(


UART_CLK/< /p>



UART_BAUD_RATE *16


))


-1 //


计算公式的宏





void uart_init


()





{




GPHCON |=0xa0; //


这个是

< br>TXD0



RXD0


的设置,他 们用的是


GPH2



3


复用的特殊





GPHUP = 0x0c; //


功能,所以还要在这设置上拉电阻,以区别高低电平的。





ULCON0 = 0x3; / /


桢格式的设置


8


个数据位,无校验< /p>





UCON0 = 0x5; //


选择的是中断与轮询模式





UFCON0 = 0; //


不设


FIFO




UMCON0 = 0; //


不设


AFC




UBRDIV0 = UART_BRD; //


设置波特率


-


-


-


-


-


-


-


-



本文更新与2021-02-27 21:27,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/676118.html

UART串口编程的相关文章