嵌入式linux调用uart,嵌入式学习之UART编程实例

嵌入式学习之UART编程实例

#include "s3c24xx.h"

#include "serial.h"

#define TXD0READY  (1<<2)

#define RXD0READY  (1)

#define PCLK            50000000    // init.c中的clock_init函数设置PCLK为50MHz

#define UART_CLK        PCLK        //  UART0的时钟源设为PCLK

#define UART_BAUD_RATE  115200      // 波特率

#define UART_BRD        ((UART_CLK  / (UART_BAUD_RATE * 16)) - 1)

/*

* 初始化UART0

* 115200,8N1,无流控

*/

void uart0_init(void)

{

GPHCON  |= 0xa0;    // GPH2,GPH3用作TXD0,RXD0

GPHUP  = 0x0c;    // GPH2,GPH3内部上拉

ULCON0  = 0x03;    // 8N1(8个数据位,无较验,1个停止位)

UCON0  = 0x05;    // 查询方式,UART时钟源为PCLK

UFCON0  = 0x00;    // 不使用FIFO

UMCON0  = 0x00;    // 不使用流控

UBRDIV0 = UART_BRD; // 波特率为115200

}

/*

* 发送一个字符

*/

void putc(unsigned char c)

{

/* 等待,直到发送缓冲区中的数据已经全部发送出去 */

while (!(UTRSTAT0 & TXD0READY));

/* 向UTXH0寄存器中写入数据,UART即自动将它发送出去 */

UTXH0 = c;

}

/*

* 接收字符

*/

unsigned char getc(void)

{

/* 等待,直到接收缓冲区中的有数据 */

while (!(UTRSTAT0 & RXD0READY));

/* 直接读取URXH0寄存器,即可获得接收到的数据 */

return URXH0;

}

/*

* 判断一个字符是否数字

*/

int isDigit(unsigned char c)

{

if (c >= '0' && c <= '9')

return 1;

else

return 0;

}

/*

* 判断一个字符是否英文字母

*/

int isLetter(unsigned char c)

{

if (c >= 'a' && c <= 'z')

return 1;

else if (c >= 'A' && c <= 'Z')

return 1;

else

return 0;

}

#include "serial.h"

int main()

{

unsigned char c;

uart0_init();  // 波特率115200,8N1(8个数据位,无校验位,1个停止位)

while(1)

{

// 从串口接收数据后,判断其是否数字或子母,若是则加1后输出

c = getc();

if (isDigit(c) || isLetter(c))

putc(c+1);

}

return 0;

}0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值