[MCU] 6ull 串口发送数据 在检测发送完成卡死

[复制链接]
850|10
 楼主| 一路向北lm 发表于 2020-8-4 18:02 | 显示全部楼层 |阅读模式


  1. #include "bsp_uart.h"

  2. /************************************
  3. * void Uart1Init(void)
  4. * 初始化6ULL的串口1
  5. * UART1_Tx -> GPIO1_IO6
  6. * UART1_Rx -> GPIO1_IO7
  7. ************************************/
  8. void Uart1Init(void)
  9. {
  10.    //1.初始化串口1对应的IO
  11.    SW_MUX_UART1_TX = 0;       //设置GPIO1_6为UART1_Tx
  12.    SW_MUX_UART1_RX = 0;       //设置GPIO1_7为UART1_Rx

  13.    SW_PAD_UART1_TX =  0X10B0; //配置UART1_Tx IO属性
  14.    SW_PAD_UART1_RX =  0X10B0; //配置UART1_Rx IO属性

  15.    GPIO1_GDIR |= (1 <<6);     //配置UART1_Tx IO为输出
  16.    GPIO1_GDIR &= ~(1 <<7);    //配置UART1_Rx IO为输入

  17.    //2.初始化UART1
  18.    UART1_UCR1 &= ~(1<<0);          //关闭串口1
  19.    UART1_UCR1 = 0;                 //清除UART1_UCR1
  20.    UART1_UCR2 = 0;                 //清除UART1_UCR2
  21.    UART1_UCR3 = 0;                 //清除UART1_UCR3
  22.    UART1_UCR2 &= ~(1<<0);          //软复位串口1
  23.    while((UART1_UCR2 & 0x1)== 0);  //等待复位完成
  24.    UART1_UCR1 &= ~(1<<14);         //关闭自动波特率检测
  25.    UART1_UCR2 |= (1<<5);           //数据位为8位
  26.    UART1_UCR2 &= ~(1<<8);          //无效验位
  27.    UART1_UCR2 &= ~(1<<6);          //1个停止位
  28.    UART1_UCR2 |= (1<<14);          //忽略RST引脚
  29.    UART1_UCR2 |= (1<<2);           //使能发送
  30.    UART1_UCR2 |= (1<<1);           //使能接收
  31.    UART1_UCR3 |= (1<<2);           //UCR3的bit2必须为1

  32.    //3.设置UART1波特率
  33.    // 波特率计算公式:Baud Rate = Ref Freq / (16 * (UBMR + 1)/(UBIR+1))
  34.    // 如果要设置波特率为 115200,那么可以使用如下参数:
  35.    // Ref Freq = 80M 也就是寄存器 UFCR 的 bit9:7=101, 表示 1 分频
  36.    // UBMR = 3124
  37.    // UBIR = 71
  38.    UART1_UFCR |= (5<<7);   //ref freq 等于 ipg_clk/1=80Mhz
  39.    UART1_UBIR = 71;
  40.    UART1_UBMR = 3124;

  41.    UART1_UCR1 |= (1<<0);          //打开串口1
  42. }

  43. /************************************
  44. * void UART1_SendByte(unsigned char byte)
  45. * 串口1 发送一个字节数据
  46. ************************************/
  47. void UART1_SendByte(unsigned char byte)
  48. {
  49.     UART1_UTXD = (byte & 0xFF);              //发送数据
  50.     while(((UART1_UCR2 >>3) & 0x01) == 0);   //等待发送完成
  51. }

  52. /************************************
  53. * void UART1_SendStr(unsigned char *str)
  54. * 串口1 发送字符串数据
  55. ************************************/
  56. void UART1_SendStr(unsigned char *str)
  57. {
  58.    while(*str== '\0')
  59.    {
  60.       UART1_SendByte(*str++);
  61.    }
  62. }

  63. /************************************
  64. * unsigned char UART1_RecvByte(void)
  65. * 串口1 接收一个字节数据
  66. ************************************/
  67. unsigned char UART1_RecvByte(void)
  68. {
  69.     while((UART1_USR2 & 0x1) == 0);   // 等待接收完成
  70.     return UART1_URXD;                // 返回接收到的数据
  71. }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ayb_ice 发表于 2020-8-5 13:35 | 显示全部楼层
while(*str== '\0')???
 楼主| 一路向北lm 发表于 2020-8-6 10:03 | 显示全部楼层
ayb_ice 发表于 2020-8-5 13:35
while(*str== '\0')???

我改了,本来while(*str!= '\0') ,卡死了,才改的,UART1_SendByte就卡死,注释 while(((UART1_UCR2 >>3) & 0x01) == 0)就ok
ayb_ice 发表于 2020-8-6 10:40 | 显示全部楼层
一路向北lm 发表于 2020-8-6 10:03
我改了,本来while(*str!= '\0') ,卡死了,才改的,UART1_SendByte就卡死,注释 while(((UART1_UCR2 >> ...

这个寄存器用对了吗?
另外不要用中断
ayb_ice 发表于 2020-8-6 10:46 | 显示全部楼层
一路向北lm 发表于 2020-8-6 10:03
我改了,本来while(*str!= '\0') ,卡死了,才改的,UART1_SendByte就卡死,注释 while(((UART1_UCR2 >> ...

一般情况下等于0 应该是发送完成了吧


所以应该是  while(((UART1_UCR2 >>3) & 0x01) != 0);
 楼主| 一路向北lm 发表于 2020-8-6 15:42 | 显示全部楼层
ayb_ice 发表于 2020-8-6 10:40
这个寄存器用对了吗?
另外不要用中断

不用中断
 楼主| 一路向北lm 发表于 2020-8-6 15:43 | 显示全部楼层
ayb_ice 发表于 2020-8-6 10:46
一般情况下等于0 应该是发送完成了吧

为1  表示发送完成
 楼主| 一路向北lm 发表于 2020-8-6 16:25 | 显示全部楼层
ayb_ice 发表于 2020-8-6 10:46
一般情况下等于0 应该是发送完成了吧

不好意思,读错寄存器了,应该是UART1_USR2  谢谢啦
 楼主| 一路向北lm 发表于 2020-8-6 16:25 | 显示全部楼层
ayb_ice 发表于 2020-8-6 10:46
一般情况下等于0 应该是发送完成了吧

不好意思,读错寄存器了,应该是UART1_USR2  谢谢啦
m564522634 发表于 2020-8-7 16:34 | 显示全部楼层
一路向北lm 发表于 2020-8-6 16:25
不好意思,读错寄存器了,应该是UART1_USR2  谢谢啦

最近在移植littleVG的gui 显示,完成了一起玩下
 楼主| 一路向北lm 发表于 2020-8-8 14:54 | 显示全部楼层
m564522634 发表于 2020-8-7 16:34
最近在移植littleVG的gui 显示,完成了一起玩下

可以的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

293

主题

3837

帖子

81

粉丝
快速回复 在线客服 返回列表 返回顶部