SAM3S中的UART串口是一个两线异步收发器。这个串口能用来通信或者跟踪。有两个DMA通道与UART串口关联,可通过使用DMA处理串口传输以节省CPU时间。

SAM3S4C中有两个UART。与外设引脚的对应关系如下:

板子上使用的是UART0,及PA9和PA10引脚。

SAM3S的UART结构框图

串口初始化,收发数据 的步骤如下:

1、配置相应IO口的引脚(设置IO时钟及引脚工作模式)

2、打开UART时钟

3、复位并停止UART

4、设置UART功能(奇偶校验UART_MR、波特率UART_BRGR、DMA UART_PTCR、收发使能UART_CR 等)

5、收发数据 UART_THR  UART_RHR

串口的初始化程序如下:

//引脚宏定义,串口0收发引脚分别对因PA9 PA10

#define PINS_UART { PIO_PA9A_URXD0|PIO_PA10A_UTXD0, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}

#define CONSOLE_PINS {PINS_UART}

//使用的串口的宏定义,使用UART0

#define CONSOLE_USART UART0

extern void UART_Configure( uint32_t baudrate, uint32_t masterClock)
{
    const Pin pPins[] = CONSOLE_PINS;
    Uart *pUart = CONSOLE_USART;

/* Configure PIO */
    PIO_Configure(pPins, PIO_LISTSIZE(pPins));  //配置对应引脚

/* Configure PMC */
    PMC->PMC_PCER0 = 1 << CONSOLE_ID;  //打开UART时钟

/* Reset and disable receiver & transmitter */
    pUart->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX
                   | UART_CR_RXDIS | UART_CR_TXDIS;  //复位并停止UART

/* Configure mode */
    pUart->UART_MR =  UART_MR_PAR_NO;  //设置奇偶校验(不校验)

/* Configure baudrate */
    /* Asynchronous, no oversampling */
    pUart->UART_BRGR = (masterClock / baudrate) / 16;  //设置波特率

/* Disable PDC channel */
    pUart->UART_PTCR = UART_PTCR_RXTDIS | UART_PTCR_TXTDIS;  //接收和发送都不使用DMA

/* Enable receiver and transmitter */
    pUart->UART_CR = UART_CR_RXEN | UART_CR_TXEN;  //使能传输

_ucIsConsoleInitialized=1 ;   //置位初始化状态
}

串口发送一个字符:

extern void UART_PutChar( uint8_t c )

{

Uart *pUart=CONSOLE_USART ;

if ( !_ucIsConsoleInitialized )//每次发送数据都先判断一下串口是否已经被初始化了

{

UART_Configure(CONSOLE_BAUDRATE, BOARD_MCK);

}

/* Wait for the transmitter to be ready */

while ( (pUart->UART_SR & UART_SR_TXEMPTY) == 0 ) ;//等待串口状态寄存器中,发送寄存器为空的标志

/* Send character */

pUart->UART_THR=c ; //发送状态为空时,即可将字符丢到发送寄存器中。

}

串口接收一个字符:

extern uint32_t UART_GetChar( void )

{

Uart *pUart=CONSOLE_USART ;

if ( !_ucIsConsoleInitialized ) //每次接收数据都要判断下串口是否被初始化了

{

UART_Configure(CONSOLE_BAUDRATE, BOARD_MCK);

}

while ( (pUart->UART_SR & UART_SR_RXRDY) == 0 ) ; //等待串口状态寄存器中的RXRDY置位,这个为表示串口完整地接收了一个数据

return pUart->UART_RHR ; //读取接收到的数据并返回。同时硬件自动复位RXRDY位。

}

之后就可以使用了,我在主函数中只用了一句来验证串口的状态:

UART_PutChar(UART_GetChar());

即,将电脑端来的数据发回去。验证下,完全正常了。

当然,这里使用的是查询方式接收数据。至于中断方式接收数据,在学会了使用中断之后会补上来的。

【AT91SAM3S】串口UART初始化及收发数据的更多相关文章

  1. STM32F4 SPI2初始化及收发数据【使用库函数】

    我的STM32F4 Discovery上边有一个加速度传感器LIS302DL.在演示工程中,ST的工程师使用这个传感器做了个很令人羡慕的东西:解算开发板的姿态.当开发板倾斜时候,处于最上边的LED点亮 ...

  2. 利用串口的硬件buf收发数据

    很多单片机的串口可以设置硬件接收和发送的buf,这样可以减少中断的次数和cpu的浪费,方法就是:发送时根据串口波特率(通讯格式N-8-1)和硬件buf缓冲的字节数计算定时器的间隔(小于1000*buf ...

  3. ARM-Linux S5PV210 UART驱动(4)----串口驱动初始化过程

    对于S5PV210 UART驱动来说,主要关心的就是drivers/serial下的samsung.c和s5pv210.c连个文件. 由drivers/serial/Kconfig: config S ...

  4. STM32F407的串口采用DMA收发数据

    源:STM32F407的串口采用DMA收发数据

  5. python 简单的串口收发数据

    # -*- coding: utf- -*- import serial #打开串口 serialPort="COM3" #串口 baudRate= #波特率 ser=serial ...

  6. 痞子衡嵌入式:嵌入式里串口(UART)自动波特率识别程序设计与实现

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是嵌入式里串口(UART)自动波特率识别程序设计与实现. 串口(UART)是嵌入式里最基础最常用也最简单的一种通讯(数据传输)方式,可以说 ...

  7. [STM32F103]串口UART配置

    l 串口时钟使能,GPIO时钟使能: RCC_APB2PeriphClockCmd(); l 串口复位: USART_DeInit(); 这一步不是必须的 l GPIO端口模式设置: GPIO_Ini ...

  8. 串口UART学习笔记(一)

    买了一个开发板学习FPGA,找到的各种东西就记录在这个博客里了,同时也方便把自己不会的问题找到的结果记录一下,都是自己手打,所以可能说的话不那么严谨,不那么精准,看到的人要带着自己的思考去看,记住尽信 ...

  9. 第011课_串口(UART)的使用

    from: 第011课_串口(UART)的使用 第001节_辅线1_硬件知识_UART硬件介绍 1. 串口的硬件介绍 UART的全称是 Universal Asynchronous Receiver ...

随机推荐

  1. centos下整合PagerDuty、nagios初探(on-call尝鲜和体验)

    [前言] 今天在某个群里看见有人介绍了PagerDuty,介绍到了slack.整合后可以更加方便和团队合作.于是我觉得来尝尝鲜. [PagerDuty是什么?] PagerDuty是一款能够在服务器出 ...

  2. "编写高质量代码"一书笔记

    总结 css架构结构 :       base  :   共用样式   common: 通用控件样式   page: 页面级样式   js 架构结构:   base 位于三层最底层,职责一是封装不同浏 ...

  3. Dynamo涉及的算法和协议——p2p架构,一致性hash容错+gossip协议获取集群状态+向量时钟同步数据

    转自:http://www.letiantian.me/2014-06-16-dynamo-algorithm-protocol/ Dynamo是Amazon的一个分布式的键值系统,P2P架构,没有主 ...

  4. HTTP Referer 防外链

    HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理. if (Req ...

  5. oracle生成行方法

    数据库记录是行的集合 set of row, 那么如何如何生成集合呢? oracle中常用的是 递归查询(with ... union all ...) 以及 connect by(树形查询) htt ...

  6. qpython3 读取安卓lastpass Cookies

    之前我的博客写了python读取windows chrome Cookies,沿着同样的思路,这次本来想尝试读取安卓chrome Cookies, 但是可能是chrome的sqlite3版本比较高读取 ...

  7. Android_Layout (一)

    layout (布局)  --->Android 有五大布局,分别是: LinearLayout : 线性布局,子组件按照垂直或者水平方向来布局. RelativeLayout :相对布局,按照 ...

  8. Graphic geometry

    Graphic有3个很重要的属性:geometry.symbol和attributes. •geometry属性定义的是一个几何对象,它是Graphic的基础,因为Graphic要表达的就是这个几何对 ...

  9. HTML编码规则、CSS属性声明顺序--简介

    From AmazeUI:http://amazeui.org/getting-started/html-css-guide HTML 属性顺序 HTML 属性应当按照以下给出的顺序依次排列,确保代码 ...

  10. 对HTML+CSS+JavaScript的个人理解

    HTML就像人的骨头架子,是人的根基,要有个人样呀,一个网站,一个WebApp要是缺根儿骨头,那就像人少个胳膊少个腿儿的,行动不方便啊:CSS就像人穿得衣服.鞋子,男人的纹身,女人擦得粉儿,好看呀,一 ...