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. WPF CAL 计算器

    界面最终结果: 下载地址:https://skydrive.live.com/redir?resid=25C3908AA2038BDB!148&authkey=!ADR71XdB04LipYE

  2. Centos7 下配置mysql5.6主从复制实例(一主两从)

    标签:mysql 数据库 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://8941355.blog.51cto.com/89313 ...

  3. C#窗体 WinForm 对话框,流

    一.对话框 ColorDialog:颜色选择控件 private void button1_Click(object sender, EventArgs e) { //显示颜色选择器 colorDia ...

  4. iOS开发UI篇—ios应用数据存储方式(偏好设置)

    iOS开发UI篇—ios应用数据存储方式(偏好设置) 一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用 ...

  5. CAN基础知识

    CAN:Controller Area Network,是ISO国际标准化的串行通信协议. CAN控制器根据两根线上的电位来判断总线电平.总线电平分为显性电平和隐性电平,二者必居其一.发送方通过使总线 ...

  6. android studio 改变代码提示的方法

    移通152余继彪 在android studio中 默认代码提示的功能是ctrl+空格,这样的提示会和输入法造成冲突,所以要改变 改变的方法就是file—seting——Keymap然后搜索basic ...

  7. 修改 UISearchBar cancelButton 样式

    今天收到个问题,老大让我修改UISearchBar cancelButton的样式本来以为很简单的一个活,没想到让我长知识了. 开始在网上搜到的方法和我想象的一样,通过遍历Subviews获得butt ...

  8. web前端基础篇④

    1.BFC-块级元素-块级格式化上下文布局规则:独立区域,与外部毫不相关内部box会在垂直方向,一个个放置box垂直方向距离由margin决定BFC的区域不会与float box重叠计算BFC高度时, ...

  9. 游戏贴图中常用术语《DC》的理解

    什么是DC呢? 在GDI中,DC(Device Context)是一个非常重要的概念. 有的书中,将DC翻译为设备描述表,也有的书中翻译为设备上下文. 但是这些翻译,无法在我们的头脑里有强烈的冲击,无 ...

  10. python多线程监控指定目录

    import win32file import tempfile import threading import win32con import os dirs=["C:\\WINDOWS\ ...