新手上路
- 积分
- 46
- 金钱
- 46
- 注册时间
- 2020-5-5
- 在线时间
- 7 小时
|
1金钱
具体代码如下:
- #include "bsp_uart.h"
- /************************************
- * void Uart1Init(void)
- * 初始化6ULL的串口1
- * UART1_Tx -> GPIO1_IO6
- * UART1_Rx -> GPIO1_IO7
- ************************************/
- void Uart1Init(void)
- {
- //1.初始化串口1对应的IO
- SW_MUX_UART1_TX = 0; //设置GPIO1_6为UART1_Tx
- SW_MUX_UART1_RX = 0; //设置GPIO1_7为UART1_Rx
- SW_PAD_UART1_TX = 0X10B0; //配置UART1_Tx IO属性
- SW_PAD_UART1_RX = 0X10B0; //配置UART1_Rx IO属性
- GPIO1_GDIR |= (1 <<6); //配置UART1_Tx IO为输出
- GPIO1_GDIR &= ~(1 <<7); //配置UART1_Rx IO为输入
- //2.初始化UART1
- UART1_UCR1 &= ~(1<<0); //关闭串口1
- UART1_UCR1 = 0; //清除UART1_UCR1
- UART1_UCR2 = 0; //清除UART1_UCR2
- UART1_UCR3 = 0; //清除UART1_UCR3
- UART1_UCR2 &= ~(1<<0); //软复位串口1
- while((UART1_UCR2 & 0x1)== 0); //等待复位完成
- UART1_UCR1 &= ~(1<<14); //关闭自动波特率检测
- UART1_UCR2 |= (1<<5); //数据位为8位
- UART1_UCR2 &= ~(1<<8); //无效验位
- UART1_UCR2 &= ~(1<<6); //1个停止位
- UART1_UCR2 |= (1<<14); //忽略RST引脚
- UART1_UCR2 |= (1<<2); //使能发送
- UART1_UCR2 |= (1<<1); //使能接收
- UART1_UCR3 |= (1<<2); //UCR3的bit2必须为1
- //3.设置UART1波特率
- // 波特率计算公式:Baud Rate = Ref Freq / (16 * (UBMR + 1)/(UBIR+1))
- // 如果要设置波特率为 115200,那么可以使用如下参数:
- // Ref Freq = 80M 也就是寄存器 UFCR 的 bit9:7=101, 表示 1 分频
- // UBMR = 3124
- // UBIR = 71
- UART1_UFCR |= (5<<7); //ref freq 等于 ipg_clk/1=80Mhz
- UART1_UBIR = 71;
- UART1_UBMR = 3124;
- UART1_UCR1 |= (1<<0); //打开串口1
- }
- /************************************
- * void UART1_SendByte(unsigned char byte)
- * 串口1 发送一个字节数据
- ************************************/
- void UART1_SendByte(unsigned char byte)
- {
- UART1_UTXD = (byte & 0xFF); //发送数据
- while(((UART1_UCR2 >>3) & 0x01) == 0); //等待发送完成
- }
- /************************************
- * void UART1_SendStr(unsigned char *str)
- * 串口1 发送字符串数据
- ************************************/
- void UART1_SendStr(unsigned char *str)
- {
- while(*str== '\0')
- {
- UART1_SendByte(*str++);
- }
- }
- /************************************
- * unsigned char UART1_RecvByte(void)
- * 串口1 接收一个字节数据
- ************************************/
- unsigned char UART1_RecvByte(void)
- {
- while((UART1_USR2 & 0x1) == 0); // 等待接收完成
- return UART1_URXD; // 返回接收到的数据
- }
复制代码
|
最佳答案
查看完整内容[请看2#楼]
结贴了 读错了寄存器了,应该是读状态寄存器UART1_USR2,却读成了UART1_UCR2,希望大家不要犯和我一样的错误。
|