[技术问答] 关于NUC131LC2AE串口2/3/4/5的使用配置问题

[复制链接]
 楼主| OKbomm 发表于 2018-3-26 10:24 | 显示全部楼层 |阅读模式
刚开始接触新唐的单片机,项目上要用到6个串口,串口0/1的中断接收和发送配置都没问题,但是配置串口2/3/4/5却驱动不起来,数据发送不出,请教一下各位有经验的,我是不是哪里没注意?顺便求一份NUC131LC2AE的寄存器手册说明
  1. void uart_init(UART_NO uart_no,uint32_t bound, uint32_t WordLength, uint32_t parity, uint32_t  stop_bits)
  2. {
  3.        
  4.         switch(uart_no)
  5.         {
  6.                 case UART_0:
  7.                         CLK_EnableModuleClock(UART0_MODULE);//使能串口时钟
  8.                         CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));//选择串口时钟源
  9.                         //设置串口接收、发送引脚
  10.                         SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB0_Msk | SYS_GPB_MFP_PB1_Msk);
  11.                         SYS->GPB_MFP |= SYS_GPB_MFP_PB0_UART0_RXD | SYS_GPB_MFP_PB1_UART0_TXD;
  12.                         //复位串口
  13.                         SYS_ResetModule(UART0_RST);
  14.                         UART_Open(UART0, bound);//默认8个数据长度,无奇偶校验,1个停止位
  15.                         UART_SetLine_Config(UART0,bound,WordLength,parity,stop_bits);//配置串口
  16.                         //配置串口接收模式
  17.                         UART0->FCR|=0X3<<4;        //配置fifo中断等级为14字节
  18.                         UART_SetTimeoutCnt(UART0, 40);//设置接收超时时间为40,单位波特率
  19.                         /*使能接收FIFO 阀值中断,和接收超时中断*/
  20.                         UART_ENABLE_INT(UART0, (UART_IER_RDA_IEN_Msk | UART_IER_TOUT_IEN_Msk));
  21.                         NVIC_EnableIRQ(UART02_IRQn);
  22.                         break;
  23.                 case UART_1:
  24.                         CLK_EnableModuleClock(UART1_MODULE);//使能串口时钟
  25.                         CLK_SetModuleClock(UART1_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));//选择串口时钟源
  26.                         //设置串口接收、发送引脚
  27.                         SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB4_Msk | SYS_GPB_MFP_PB5_Msk);
  28.                         SYS->GPB_MFP |= SYS_GPB_MFP_PB4_UART1_RXD | SYS_GPB_MFP_PB5_UART1_TXD;
  29.                         //复位串口
  30.                         SYS_ResetModule(UART1_RST);
  31.                         UART_Open(UART1, bound);//默认8个数据长度,无奇偶校验,1个停止位
  32.                         UART_SetLine_Config(UART1,bound,WordLength,parity,stop_bits);//配置串口
  33.                         //配置串口接收模式
  34.                         UART1->FCR|=0X3<<4;        //配置fifo中断等级为14字节
  35.                         UART_SetTimeoutCnt(UART1, 40);//设置接收超时时间为40,单位波特率
  36.                         /*使能接收FIFO 阀值中断,和接收超时中断*/
  37.                         UART_ENABLE_INT(UART1, (UART_IER_RDA_IEN_Msk | UART_IER_TOUT_IEN_Msk));
  38.                         NVIC_EnableIRQ(UART1_IRQn);
  39.                         break;
  40.                 case UART_2:
  41.                         CLK_EnableModuleClock(UART2_MODULE);//使能串口时钟
  42.                         CLK_SetModuleClock(UART2_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));//选择串口时钟源
  43.                         //设置串口接收、发送引脚
  44.                         SYS->GPB_MFP &= ~(SYS_GPD_MFP_PD14_Msk | SYS_GPD_MFP_PD15_Msk);
  45.                         SYS->GPB_MFP |= SYS_GPD_MFP_PD14_UART2_RXD | SYS_GPD_MFP_PD15_UART2_TXD;
  46.                         //复位串口
  47.                         SYS_ResetModule(UART2_RST);
  48.                         UART_Open(UART2, bound);//默认8个数据长度,无奇偶校验,1个停止位
  49.                         UART_SetLine_Config(UART2,bound,WordLength,parity,stop_bits);//配置串口
  50.                         //配置串口接收模式
  51.                         UART2->FCR|=0X3<<4;        //配置fifo中断等级为14字节
  52.                         UART_SetTimeoutCnt(UART2, 40);//设置接收超时时间为40,单位波特率
  53.                         /*使能接收FIFO 阀值中断,和接收超时中断*/
  54.                         UART_ENABLE_INT(UART2, (UART_IER_RDA_IEN_Msk | UART_IER_TOUT_IEN_Msk));
  55.                         break;
  56.                 case UART_3:
  57.                         CLK_EnableModuleClock(UART3_MODULE);//使能串口时钟
  58.                         CLK_SetModuleClock(UART3_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));//选择串口时钟源
  59.                         //设置串口接收、发送引脚
  60.                         SYS->GPB_MFP &= ~(SYS_GPA_MFP_PA3_Msk | SYS_GPA_MFP_PA2_Msk);
  61.                         SYS->GPB_MFP |= SYS_GPA_MFP_PA3_UART3_RXD | SYS_GPA_MFP_PA2_UART3_TXD;
  62.                         //复位串口
  63.                         SYS_ResetModule(UART3_RST);
  64.                         UART_Open(UART3, bound);//默认8个数据长度,无奇偶校验,1个停止位
  65.                         UART_SetLine_Config(UART3,bound,WordLength,parity,stop_bits);//配置串口
  66.                         //配置串口接收中断
  67.                         UART_ENABLE_INT(UART3, UART_IER_RDA_IEN_Msk);
  68.                         NVIC_EnableIRQ(UART3_IRQn);
  69.                         break;
  70.                 case UART_4:
  71.                         CLK_EnableModuleClock(UART4_MODULE);//使能串口时钟
  72.                         CLK_SetModuleClock(UART4_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));//选择串口时钟源
  73.                         //设置串口接收、发送引脚
  74.                         SYS->GPB_MFP &= ~(SYS_GPC_MFP_PC7_Msk | SYS_GPC_MFP_PC6_Msk);
  75.                         SYS->GPB_MFP |= SYS_GPC_MFP_PC7_UART4_RXD | SYS_GPC_MFP_PC6_UART4_TXD;
  76.                         //复位串口
  77.                         SYS_ResetModule(UART4_RST);
  78.                         UART_Open(UART4, bound);//默认8个数据长度,无奇偶校验,1个停止位
  79.                         UART_SetLine_Config(UART4,bound,WordLength,parity,stop_bits);//配置串口
  80.                         //配置串口接收中断
  81.                         UART_ENABLE_INT(UART4, UART_IER_RDA_IEN_Msk);
  82.                         NVIC_EnableIRQ(UART4_IRQn);
  83.                         break;
  84.                 case UART_5:
  85.                         CLK_EnableModuleClock(UART5_MODULE);//使能串口时钟
  86.                         CLK_SetModuleClock(UART5_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));//选择串口时钟源
  87.                         //设置串口接收、发送引脚
  88.                         SYS->GPB_MFP &= ~(SYS_GPA_MFP_PA1_Msk | SYS_GPA_MFP_PA0_Msk);
  89.                         SYS->GPB_MFP |= SYS_GPA_MFP_PA1_UART5_RXD | SYS_GPA_MFP_PA0_UART5_TXD;
  90.                         //复位串口
  91.                         SYS_ResetModule(UART5_RST);
  92.                         UART_Open(UART5, bound);//默认8个数据长度,无奇偶校验,1个停止位
  93.                         UART_SetLine_Config(UART5,bound,WordLength,parity,stop_bits);//配置串口
  94.                         //配置串口接收中断
  95.                         UART_ENABLE_INT(UART5, UART_IER_RDA_IEN_Msk);
  96.                         NVIC_EnableIRQ(UART5_IRQn);
  97.                         break;
  98.                 case UART_6:
  99.                         break;
  100.                 case UART_7:
  101.                         break;
  102.                 default:
  103.                         break;
  104.         }
  105.        
  106.        

  107. }
 楼主| OKbomm 发表于 2018-3-26 10:28 | 显示全部楼层
自己顶一下
 楼主| OKbomm 发表于 2018-3-26 14:04 | 显示全部楼层
找了份寄存器手册看,串口2、3/4/5的引脚配置错了,配置串口2的引脚需要配置两个寄存器
lzqjayhanhan 发表于 2021-4-26 11:22 | 显示全部楼层
OKbomm 发表于 2018-3-26 14:04
找了份寄存器手册看,串口2、3/4/5的引脚配置错了,配置串口2的引脚需要配置两个寄存器 ...

你好,我也遇到跟你一样的问题,你串口3可以正常收发了吗?怎么配置的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

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