AT91SAM3S串口UART初始化及收发数据

发布者:婉如Chanel最新更新时间:2016-06-03 来源: eefocus关键字:AT91SAM3S  串口UART  初始化  收发数据 手机看文章 扫描二维码
随时随地手机看文章
SAM3S中的UART串口是一个两线异步收发器。这个串口能用来通信或者跟踪。有两个DMA通道与UART串口关联,可通过使用DMA处理串口传输以节省CPU时间。

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

AT91SAM3S串口UART初始化及收发数据
 

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

SAM3S的UART结构框图

AT91SAM3S串口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_URXD0PIO_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  初始化  收发数据 引用地址:AT91SAM3S串口UART初始化及收发数据

上一篇:STM32用DMA实现多路ADC通道数据采集
下一篇:STM32F4 SPI2初始化及收发数据使用库函数

推荐阅读最新更新时间:2024-03-16 14:56

arm linux 下中断流程简要分析初始化
上面的这个表我们称之为 异常中断向量表 , 表中的IRQ和FIQ位置就是用来存放处理中断函数的地址。至于选择何处存放该表,可由CPU的协处理器完成。 如s3c2410下由CP15中寄存器1的位13来决定,我们可以通过设置该位来告诉系统我们的向量表在哪。 具体可参考 ARM ArchitectureReference Manual 因此,在中断初始化的时候我们要做的就是在IRQ和FIQ的位置处放置我们的中断处理函数地址或跳转语句跳转到我们的中断处理函数。这个过程是在trap_init中完成的,而他由start_kernel()调用。 arch/arm/kernel/traps.c: void __init trap_init(
[单片机]
基于S3C6410的ARM11学习(十三) C语言环境初始化
如今,汇编的部分,就剩下最后一步了。C语言环境初始化。因为后面的代码要用C语言来写了。毕竟C语言编写比汇编要容易对了,而且c程序具有易读性。 C程序要运行,一个最重要的东西就是栈了。因为有栈,c程序才能在程序跳转的时候,保存上文。然后在程序返回的时候,将保存的上文恢复。这样,才保证了调用函数之前和之后的上下文是不变的。 使用汇编代码写的话,是不用设置栈的,因为保护上下文是要用汇编在代码中自行写出的,而C代码是靠编译器编译自动加上的。 栈,有4种。 从图中可以看出四种栈的区别。栈都是放在内存空间的,因为要随时读写。栈的起始地址放在内存的高地址出,那么增长方向就是向下增长,这种就是递减栈。如果栈的起始地址放
[单片机]
基于S3C6410的ARM11学习(十三) C语言环境<font color='red'>初始化</font>
LM3S9B96 的UART以中断方式收发数据
lm3s9b96的uart发送和接收都可以进入用户编写的中断处理函数。 uart的配置无非是设置:波特率、数据位、停止位、奇偶校验位等。 下面是用uart1为例,配置成中断方式收发数据 #include inc/lm3s9b96.h #include inc/hw_memmap.h #include inc/hw_types.h #include inc/hw_ints.h #include driverlib/interrupt.h #include driverlib/gpio.h #include driverlib/uart.h #include driverlib/sysctl.h
[单片机]
【STM32】5—UART串口(中断模式)
0 实验预期效果 完成串口数据的接收和发送 1 相关原理图 2 软件配置 STM32CubeMX配置USART1: 在NVIC中配置USART中断优先级: 3 代码编写 3.1 函数认识 见博客【STM32】HAL库学习 2—hal_uart_kokoのadventure的博客-CSDN博客 3.1.1 串口发送 /** * @brief Sends an amount of data in non blocking mode. * @note When UART parity is not enabled (PCE = 0), and Wo
[单片机]
【STM32】5—<font color='red'>UART</font><font color='red'>串口</font>(中断模式)
UART0串口编程系列(三)
一.潜在的危机 1.在uc/os操作系统中设计串口编程时,由于ISR和多个任务并发执行,情况比较复杂。尤其是接收状态为被动状态时,只能靠串行口中断来接收数据。 2.在进行串行通信时,双方遵循相同的通信协议。由于波特率不变,因此相邻两次串口中断的间隔时间基本固定。 3.在以下两种情况时会使接收过程出现错误: Ø 第一种情况是系统关中断的最长时间大于相邻两次串行接收中断的间隔时间,这时将可能导致遗漏一次中断,造成数据丢失。 ² 实时操作系统内核的关中断的最长时间是已知的,通常很短,它不是问题关键。 ² 系统关中断的最长时间往往是由用户软件造成的,例如:我们编写的中断服务函数过于复杂,导致系统为了处理中断服务函数而导致关中断时间过长。
[单片机]
MSP430的SPI通信例程(SD卡初始化-理论解说)
最近需要做一个数据存储,发现SD卡这一块还不太好弄 现在的单片机有相当一部分还不支持SDIO,比如MSP430(据我所知,如果有支持的型号了还请及时告诉我~),所以只好用SPI通信来进行SD卡的操作,虽然后续涉及到更为复杂的FAT等等,但是首先需要解决的仍然是建立通信的问题。 采用的单片机型号为MSP430F5438A,用了一个开发板。 SPI通信基本例程 例程及解释如下: //===========================================================================// // // // 文件:
[单片机]
CC-Link现场总线的通信初始化设置方法和应用比较分析
    CC-Link现场总线是日本三菱电机公司主推的一种基于PLC系统的现场总线,这是目前在世界现场总线市场上唯一的源于亚洲、又占有一定市场份额的现场总线。它在实际工程中显示出强大的生命力,特别是在制造业得到广泛的应用。      在CC-Link现场总线的应用过程中,最为重要的一部分便是对系统进行通信初始化设置。目前CC-Link通信初始化设置的方法有三种,本文将对这三种不同的初始化设置方法进行比较和分析,以期寻求在不同的情况下如何来选择最简单有效的通信初始化设置方法。这对CC-Link现场总线在实际工程中的使用具有重要的现实意义,一则为设计人员在保证设计质量的前提下减少工作量和节省时间,二则也试图探索一下是否可以进一步发
[嵌入式]
尼桑天籁电动车窗初始化
尼桑天籁电动车窗初始化   问题描述:    天籁车断电或更换了玻璃或更换了电机,会出现自动档玻璃升到顶又降下来的现象,用常规的设定方法(升到顶再向上拉住开关5秒)会不起效果,此时的设定方法有别于其他的常规设定。 操作步骤: 1.拆开门板、拆下玻璃、拆下升降机的总成。 2.拆下玻璃升降电机。 3.打开钥匙,用玻璃升降开关向下点按2-3下,电机会短暂转动三下。 4.向上用自动档,电机会一直转,等电机停下来,关闭钥匙。 5.装上电机。再把所有的拆下来装上即可。 注意: 1,必须从升降机架子上拆下电机。 2,向下用向下第一档点按,向上用向上第二档。 3,向下3次左右,向上1次。 4,装
[传感器]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved