查看: 1693|回复: 4

[求助] 求解,KL25 UART0接收终端只能进一次

[复制链接]

该用户从未签到

2

主题

8

帖子

0

新手上路

Rank: 1

积分
37
最后登录
2020-5-12
发表于 2017-4-20 12:34:18 | 显示全部楼层 |阅读模式
void uart0Init (uint32_t baud_rate)
{
  register uint16_t sbr;
  unsigned char temp;
  SIM_SCGC4 |= SIM_SCGC4_UART0_MASK; //sim模块使能串口
  SIM_SOPT2 |= SIM_SOPT2_UART0SRC(0x1);
  SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;

  PORTA_PCR1 = PORT_PCR_MUX(2);//串口引脚初始化
  PORTA_PCR2 = PORT_PCR_MUX(2);

  UART0_C2 &= ~(UART0_C2_TE_MASK | UART0_C2_RE_MASK);
  sbr = (uint16_t)((48000000)/(baud_rate * 16));
  temp = UART_BDH_REG(UART0_BASE_PTR) & ~(UART_BDH_SBR(0x1F));
  UART_BDH_REG(UART0_BASE_PTR) = temp |  UART_BDH_SBR(((sbr & 0x1F00) >> 8));
  UART_BDL_REG(UART0_BASE_PTR) = (uint8_t)(sbr & UART_BDL_SBR_MASK);

  NVIC_ICPR |= NVIC_ICPR_CLRPEND12_MASK;//nvic中开启uart0中断
  NVIC_ISER |= NVIC_ISER_SETENA12_MASK;
  NVIC_IPR3 |= NVIC_IP_PRI_12(2);

  UART0_C2 |= (UART0_C2_TE_MASK | UART0_C2_RE_MASK | UART_C2_RIE_MASK);          //使能uart0中断
}
///串口中断服务程序
void UART0_isr(void)
{
  if(UART0_S1 & UART_S1_RDRF_MASK)
  {
    rxData = UART0_D;
  }
  NVIC_ICPR |= NVIC_ICPR_CLRPEND12_MASK; //清除中断标志
}
这样配置完了之后,串口中断只会进去一次,然后就进不去了,程序正常执行

回复

使用道具 举报

该用户从未签到

2

主题

8

帖子

0

新手上路

Rank: 1

积分
37
最后登录
2020-5-12
 楼主| 发表于 2017-4-20 12:40:55 | 显示全部楼层
本帖最后由 大皮蛋 于 2017-4-20 12:42 编辑

波特率设置正确,中断能进去一次,进去后接收的数据也是正常的,就是进不去下一次了。。。以同样的方式设置的串口1能正常工作
回复

使用道具 举报

该用户从未签到

2

主题

8

帖子

0

新手上路

Rank: 1

积分
37
最后登录
2020-5-12
 楼主| 发表于 2017-4-20 12:54:24 | 显示全部楼层
问题解决了,串口0有个溢出标志位,当串口0溢出标志位置一了之后就不会进串口0中断了,所以将串口0的溢出中断打开,把溢出标志位在中断中清零就好了。
回复

使用道具 举报

  • TA的每日心情

    2017-1-4 08:05
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    85

    主题

    1629

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2569

    优秀版主

    最后登录
    2019-3-28
    发表于 2017-4-20 13:08:50 | 显示全部楼层
    大皮蛋 发表于 2017-4-20 12:54
    问题解决了,串口0有个溢出标志位,当串口0溢出标志位置一了之后就不会进串口0中断了,所以将串口0的溢出中 ...

    你直接用SDK多好或者参考也行,就像这类的错误用SDK完全可以避免,人家原厂一帮大牛那么长时间做出来的总比我们自己去探索好吧
    回复

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24866
    最后登录
    2025-7-18
    发表于 2017-4-20 13:27:31 | 显示全部楼层
    大皮蛋 发表于 2017-4-20 12:54
    问题解决了,串口0有个溢出标志位,当串口0溢出标志位置一了之后就不会进串口0中断了,所以将串口0的溢出中 ...

    其实关于UART的驱动,官方的不管是KSDK还是寄存器控制版本的例程中都有,楼主下次可以先看下芯片手册和官方代码。
    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-19 08:54 , Processed in 0.088468 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表