AVR USART串口程序

发布者:Yuexiang最新更新时间:2016-10-18 来源: eefocus关键字:AVR  USART  串口程序 手机看文章 扫描二维码
随时随地手机看文章
usart简介:
  • 通用同步和异步串行接收器和转发器(USART) 是一个高度灵活的串行通讯设备。主要特点为:
    全双工操作( 独立的串行接收和发送寄存器)
    异步或同步操作
    主机或从机提供时钟的同步操作
    高精度的波特率发生器
    支持5, 6, 7, 8, 或9 个数据位和1 个或2 个停止位
    硬件支持的奇偶校验操作
    数据过速检测
    帧错误检测
    噪声滤波,包括错误的起始位检测,以及数字低通滤波器
    三个独立的中断:发送结束中断, 发送数据寄存器空中断,以及接收结束中断
    多处理器通讯模式
    倍速异步通讯模式

数据读写 官方解释

  • USART的初始化
    void USART_Init( unsigned int baud )
    {
    /* 设置波特率*/
    UBRRH = (unsigned char)(baud>>8);
    UBRRL = (unsigned char)baud;
    /* 接收器与发送器使能*/
    UCSRB = (1< /* 设置帧格式: 8 个数据位, 2 个停止位*/
    UCSRC = (1< }
  • 数据发送【发送5 到8 位数据位的帧】
    void USART_Transmit( unsigned char data )
    {
    /* 等待发送缓冲器为空 */
    while ( !( UCSRA & (1< ;
    /* 将数据放入缓冲器,发送数据 */
    UDR = data;
    }
  • 数据发送【发送9 位数据位的帧】
    void USART_Transmit( unsigned int data )
    {
    /* 等待发送缓冲器为空 */
    while ( !( UCSRA & (1< ;
    /* 将第9 位复制到TXB8 */
    UCSRB &= ~(1< if ( data & 0x0100 )
    UCSRB |= (1< /* 将数据放入缓冲器,发送数据 */
    UDR = data;
    }
  • 数据接收【以5 到8 个数据位的方式接收数 据帧】
    unsigned char USART_Receive( void )
    {
    /* 等待接收数据*/
    while ( !(UCSRA & (1< ;
    /* 从缓冲器中获取并返回数据*/
    return UDR;
    }
  • 数据接收【以9 个数据位的方式接收帧】
    unsigned int USART_Receive( void )
    {
    unsigned char status, resh, resl;
    /* 等待接收数据*/
    while ( !(UCSRA & (1< ;
    /* 从缓冲器中获得状态、第9 位及数据*/
    /* from buffer */
    status = UCSRA;
    resh = UCSRB;
    resl = UDR;
    /* 如果出错,返回-1 */
    if ( status & (1< return -1;
    /* 过滤第9 位数据,然后返回*/
    resh = (resh >> 1) & 0x01;
    return ((resh << 8) | resl);
    }
  • 首先包含sio.h和相关头文件。
  • 调用Com_init(); //串行口初始化
  • 主程序
    void main(void)
    {
    uint8 SIO_buff[4]; //定义串口数据缓冲区
    init_devices();
    //指示单片机正常开始工作,一亮,二亮,都亮,都灭
    PORTA = 0x02; //1脚为高,0脚为低,0脚灯亮
    Delay(); //延时
    PORTA = 0x01; //0脚为高,1脚为低,1脚灯亮
    Delay(); //延时
    PORTA = 0x00; //同时亮
    Delay(); //延时
    PORTA = 0x03; //同时灭

    Com_putstring ("ww",2,&RTbuf_UART0); //输出一个字符串到串行口
    while(1)
    {
    if(Com_R_count(&RTbuf_UART0)!=0)
    {
    Com_getstring (SIO_buff,1,&RTbuf_UART0);
    Com_Rbuf_Clear(&RTbuf_UART0); //清空buffer
    if(SIO_buff[0]==1) //接收到一个一
    {
    Com_putstring ("ok!!",4,&RTbuf_UART0); //输出一个字符串到串行口
    PORTA = 0x00; //同时亮
    Delay(); //延时
    PORTA = 0x03; //同时灭
    }
    } //end of if(Com_R_count(&RTbuf_UART0)!=0)
    Delay();//延时
    Com_putstring ("ww00",4,&RTbuf_UART0); //输出一个字符串到串行口
    }
    }

串口调试经验谈:

1、确保你的串口连线正常,有的串口的接法,9针串口线的7针和第八针要交叉,本站最小系统板的V2.3需要交叉,V2.5不需要交叉。

2、确保你的MAX232工作正常,方法:在本开发小板上把跳线JP2的1和3短接,2和4不接,通过串口调试助手发什么数据就可以收到什么数据。

3、最容易出现的一个问题是,晶振的选择,本程序要求晶振是7.3728M外部晶振,为什么使用7.3728的特殊晶振,因为它可以产生标准的波特率,如果你收到的是乱码或者根本无法收到,请检查你的晶振的相关熔丝位设置是否正确,这里看看熔丝位快速入门。

关键字:AVR  USART  串口程序 引用地址:AVR USART串口程序

上一篇:ICCAVR与CodeVisionAVR
下一篇:AVR IAP功能

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

MSP430G2553测试程序(串口程序,定时器模式)
// // // MSP430G2xx3 // ----------------- // /|| XIN|- // | | | // --|RST XOUT|- // | | // | CCI0B/TXD/P1.1|-------- // | | 9600 8N1 // | CCI0A/RXD/P1.2| -------- // Built with IAR Embedded Workbench Version: 5.40 //串口调试助手,下载地址:http://www.sudt.com/download/AccessPort137.zip //***************************************
[单片机]
基于STM32F429-Discovery USART1 PA9 PA10 调试成功
原则上,像USART1等这些基本的外设,根据官方的库,应该直接成功了,可是,我试了一下,就是不成功。虽然有STM32F10X的基础,但是感觉打印的就是乱码,并且发送时,竟然中断接收函数里,中断进不了!! 后来查看原理图,原来STLink V2有引脚与PA9 PA10连接。应该是USB转串口吧,因此,再把USB-TTL 接到PA9 PA10上,就会发生 两个TXD- TXD相互干扰的现象,因此不通!!我这里直接去掉连接的短接电阻,程序正常了。 注意开始时需要修改一下库里的晶振设置:8M外部晶振与PLL_M=8。官方库好像是基于25MHz晶振的,但是实际的焊接的为:8MHz晶振。 修改后:测试成功了。收发正常了。
[单片机]
基于STM32F429-Discovery <font color='red'>USART</font>1 PA9 PA10 调试成功
比较ARM,AVR,MSP430,Coldfire,DSP,FPGA
1 我以为这样比没有意义,做嵌入式系统最大特征是 嵌入 二字,也就是说你的控制系统是嵌入于你的控制对象之中,所以首先是服从于对象的需求和特征,脱离对象空论谁好谁坏有何依据? 每个MCU都有其存在的价值,每个使用者的选择都有其道理,AVR开始时是以单时钟周期指令为卖点,相对于当时 12个时钟的经典51确实有优势,而且基于CMOS的特征,时钟越高功耗越大,所以它在能耗上似乎明显占优。 可随着技术的改进,51现在已经早就有了4时钟周期,2时钟周期乃至单时钟周期的芯片了,此时AVR的速度优势已不存在。 如果考虑最高时钟限制,读者可以比较一下,似乎AVR的速度还不如某些51快。 如果考虑开发成本,那就更难说了。 至于ARM,有其优势
[单片机]
stm32USART使用(库函数)
1,定义GPIO端口、串口USART、中断NVIC初始化结构体。 2,打开相关外设时钟,串口1的时钟和引脚都在APB2总线上所以可以直接|操作,如下 3,给GPIO结构体成员赋值,设置引脚功能,此处用的是USART1,Tx是PA9,Rx是PA10,我们要设置PA9为复用推挽输出,PA10为浮空输入。 4,初始化GPIO端口之后我们就要配置中断分组和串口中断优先级,中断优先级分组只用设置一次。 5,以上配置好之后我们就可以来配置USART了。 6,最后我们不能忘记了编写串口接收中断函数 将函数名字声明到头文件里以上我们的串口初始化程序就编写完毕了!
[单片机]
stm32<font color='red'>USART</font>使用(库函数)
USART USART1收发功能工程
功能:PC端发送一个特定的字符:0x0d 0x0a,单片机则返回一句话,如图: _ !知识: 1、复用功能I/O和调试配置(AFIO) 为了优化外设数目,可以把一些复用功能重新映射到其他引脚上。设置复用重映射和调试I/O配置寄存器(AFIO_MAPR)(参见0节)实现引脚的重新映射。这时,复用功能不再映射到它们的原始分配上。 2、嵌套向量中断控制器(NVIC) l 43 个可屏蔽中断通道(不包含16 个Cortex-M3 的中断线); l 16 个可编程的优先等级; l 低延迟的异常和中断处理; l 电源管理控制; l 系统控制寄存器的实现; l 嵌套向量中断控制器(NVIC)和处理器核的接口紧密
[单片机]
<font color='red'>USART</font> <font color='red'>USART</font>1收发功能工程
AVR汇编初探之二《AVR的指令与汇编系统》
学单片机那么久了,感觉想要深入,还得看汇编语言,至少得了解单片机内部结构。 下面就以ATmega16为例,介绍一下AVR单片机结构和汇编语言。 AVR单片机的CPU内核结构 如上两图,左图是虚线框内AVR CPU的内核结构,右图是AVR单片机内核结构的方框图,可以看出AVR单片机的数据总线(CPU字长)是8位的,也就说它是8位单片机。 AVR采用了Harvard结构,具有独立的数据和程序总线,CPU在执行一条指令的同时,就将PC中指定的下一条指令取出,构成了一级流水线运行方式,实现了一个时钟周期执行一条指令,数据吞吐量高达1MIPS/MHz。 AVR CPU内核由几个重要的部分组成,它们分别是: A.算数逻辑单元ALU(Ari
[单片机]
<font color='red'>AVR</font>汇编初探之二《<font color='red'>AVR</font>的指令与汇编系统》
AVR fuse位详解
初学者对熔丝经常不解,AVR芯片使用熔丝来设定时钟、启动时间、一些功能的使能、BOOT区设定、当然还有最让初学者头疼的保密位,设不好锁了芯片很麻烦。要想使MCU功耗最小也要了解一些位的设定 在此写下自己对熔丝的理解,参照了一些MEGA16的PDF文档,双龙的文档,以及大家的帖子。力求易懂、全面。 首先记住: 1:未编程(检查框不打钩) 0:编程 (检查框打钩) 建议在配置熔丝之前先 读取配置 读出原来的设定,再自己编辑。 看看 M16的出厂设置。 默认设置为:内部RC振荡8MHZ 6 CK + 65 ms CKSEL=0100 SUT=10 高位:时钟及启动时间设置: BODLEVEL: BOD电平选择 1:2.7V
[单片机]
简述stm32的usart的功能特点
关于STM32的启动流程,网上有的资料在讨论几种boot模式,有的在回答启动文件的内容,在查阅了很多资料后,本文给出一个比较全面的总结和回答。 1. 根据boot引脚决定三种启动模式 复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值。BOOT0 为专用引脚,而 BOOT1 则与 GPIO 引脚共用。一旦完成对 BOOT1 的采样,相应 GPIO 引脚即进入空闲状态,可用于其它用途。BOOT0与BOOT1引脚的不同值指向了三种启动方式: 从主Flash启动。主Flash指的是STM32的内置Flash。选择该启动模式后,内置Flash的起始地址将被重映射到0x00000000地址,代码将在该处开始执行。一般我
[单片机]
简述stm32的<font color='red'>usart</font>的功能特点
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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