Uart串口


title: Uart串口
tags: ARM
date: 2018-10-20 16:38:28
---

Uart串口

和单片机的应用没什么区别,首先设置IO复用,设置波特率和数据位,以及中断相关的,简单的应用测试可以先关掉中断.从下图看到,usb转串口连接到COM1COM1是内部的Uart0

mark

mark

程序初始化

UART0
RX0 GPH3
TX0 GPH2
//init uart
void Uart0_init()
{
    //配置GPIO 复用为uart
    //配置相应的 GPHCON 为10 串口
    // 也就是 _BIT5,BIT7 置1  BIT4,BIT6清零
    GPHCON &=~(_BIT4|_BIT5|_BIT6|_BIT7);
    GPHCON |=(_BIT5|_BIT7);

    //设置上拉
    GPHUP &=~(_BIT2|_BIT3);

    //禁止红外,8N1
    ULCON0=(_BIT0|_BIT1);

    // PCLK(50M),中断/查询模式打开
    // FCLK : HCLK : PCLK = 400m : 100m : 50m
    UCON0 = (0x01)|(0x01<<2); 
    UBRDIV0=26;//CLK/(baund*16)-1


    //UFCON0 FIFO 不使用
    //UMCON0 不使用流控
    //UTRSTAT0 中断标志位
    //UERSTAT0 错误标志
    //UFSTAT0  FIFO标志
    //UMSTAT0  模式配置,CTS
    //UTXH0、URXH0    BUF

    //这里要清除标志位,不然好像有点问题
    UTRSTAT0=0x06;
}

int putchar(int c)
{
    while(!(UTRSTAT0&_BIT2));
    // UTXH0 被定义为uint,这里应该是char类型的地址0x50000023(B) 
    UTXH0 = (unsigned char )c;
}
int getchar(void)
{
    while(!(UTRSTAT0&_BIT0));
    return URXH0;
}

int puts(const char *s)
{
    while(*s)
    {
        putchar(*s);
        s++;
    }
}

猜你喜欢

转载自www.cnblogs.com/zongzi10010/p/10023572.html