打印
[技术问答]

关于NUC131LC2AE串口2/3/4/5的使用配置问题

[复制链接]
2026|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
OKbomm|  楼主 | 2018-3-26 10:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚开始接触新唐的单片机,项目上要用到6个串口,串口0/1的中断接收和发送配置都没问题,但是配置串口2/3/4/5却驱动不起来,数据发送不出,请教一下各位有经验的,我是不是哪里没注意?顺便求一份NUC131LC2AE的寄存器手册说明
void uart_init(UART_NO uart_no,uint32_t bound, uint32_t WordLength, uint32_t parity, uint32_t  stop_bits)
{
       
        switch(uart_no)
        {
                case UART_0:
                        CLK_EnableModuleClock(UART0_MODULE);//使能串口时钟
                        CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));//选择串口时钟源
                        //设置串口接收、发送引脚
                        SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB0_Msk | SYS_GPB_MFP_PB1_Msk);
                        SYS->GPB_MFP |= SYS_GPB_MFP_PB0_UART0_RXD | SYS_GPB_MFP_PB1_UART0_TXD;
                        //复位串口
                        SYS_ResetModule(UART0_RST);
                        UART_Open(UART0, bound);//默认8个数据长度,无奇偶校验,1个停止位
                        UART_SetLine_Config(UART0,bound,WordLength,parity,stop_bits);//配置串口
                        //配置串口接收模式
                        UART0->FCR|=0X3<<4;        //配置fifo中断等级为14字节
                        UART_SetTimeoutCnt(UART0, 40);//设置接收超时时间为40,单位波特率
                        /*使能接收FIFO 阀值中断,和接收超时中断*/
                        UART_ENABLE_INT(UART0, (UART_IER_RDA_IEN_Msk | UART_IER_TOUT_IEN_Msk));
                        NVIC_EnableIRQ(UART02_IRQn);
                        break;
                case UART_1:
                        CLK_EnableModuleClock(UART1_MODULE);//使能串口时钟
                        CLK_SetModuleClock(UART1_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));//选择串口时钟源
                        //设置串口接收、发送引脚
                        SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB4_Msk | SYS_GPB_MFP_PB5_Msk);
                        SYS->GPB_MFP |= SYS_GPB_MFP_PB4_UART1_RXD | SYS_GPB_MFP_PB5_UART1_TXD;
                        //复位串口
                        SYS_ResetModule(UART1_RST);
                        UART_Open(UART1, bound);//默认8个数据长度,无奇偶校验,1个停止位
                        UART_SetLine_Config(UART1,bound,WordLength,parity,stop_bits);//配置串口
                        //配置串口接收模式
                        UART1->FCR|=0X3<<4;        //配置fifo中断等级为14字节
                        UART_SetTimeoutCnt(UART1, 40);//设置接收超时时间为40,单位波特率
                        /*使能接收FIFO 阀值中断,和接收超时中断*/
                        UART_ENABLE_INT(UART1, (UART_IER_RDA_IEN_Msk | UART_IER_TOUT_IEN_Msk));
                        NVIC_EnableIRQ(UART1_IRQn);
                        break;
                case UART_2:
                        CLK_EnableModuleClock(UART2_MODULE);//使能串口时钟
                        CLK_SetModuleClock(UART2_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));//选择串口时钟源
                        //设置串口接收、发送引脚
                        SYS->GPB_MFP &= ~(SYS_GPD_MFP_PD14_Msk | SYS_GPD_MFP_PD15_Msk);
                        SYS->GPB_MFP |= SYS_GPD_MFP_PD14_UART2_RXD | SYS_GPD_MFP_PD15_UART2_TXD;
                        //复位串口
                        SYS_ResetModule(UART2_RST);
                        UART_Open(UART2, bound);//默认8个数据长度,无奇偶校验,1个停止位
                        UART_SetLine_Config(UART2,bound,WordLength,parity,stop_bits);//配置串口
                        //配置串口接收模式
                        UART2->FCR|=0X3<<4;        //配置fifo中断等级为14字节
                        UART_SetTimeoutCnt(UART2, 40);//设置接收超时时间为40,单位波特率
                        /*使能接收FIFO 阀值中断,和接收超时中断*/
                        UART_ENABLE_INT(UART2, (UART_IER_RDA_IEN_Msk | UART_IER_TOUT_IEN_Msk));
                        break;
                case UART_3:
                        CLK_EnableModuleClock(UART3_MODULE);//使能串口时钟
                        CLK_SetModuleClock(UART3_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));//选择串口时钟源
                        //设置串口接收、发送引脚
                        SYS->GPB_MFP &= ~(SYS_GPA_MFP_PA3_Msk | SYS_GPA_MFP_PA2_Msk);
                        SYS->GPB_MFP |= SYS_GPA_MFP_PA3_UART3_RXD | SYS_GPA_MFP_PA2_UART3_TXD;
                        //复位串口
                        SYS_ResetModule(UART3_RST);
                        UART_Open(UART3, bound);//默认8个数据长度,无奇偶校验,1个停止位
                        UART_SetLine_Config(UART3,bound,WordLength,parity,stop_bits);//配置串口
                        //配置串口接收中断
                        UART_ENABLE_INT(UART3, UART_IER_RDA_IEN_Msk);
                        NVIC_EnableIRQ(UART3_IRQn);
                        break;
                case UART_4:
                        CLK_EnableModuleClock(UART4_MODULE);//使能串口时钟
                        CLK_SetModuleClock(UART4_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));//选择串口时钟源
                        //设置串口接收、发送引脚
                        SYS->GPB_MFP &= ~(SYS_GPC_MFP_PC7_Msk | SYS_GPC_MFP_PC6_Msk);
                        SYS->GPB_MFP |= SYS_GPC_MFP_PC7_UART4_RXD | SYS_GPC_MFP_PC6_UART4_TXD;
                        //复位串口
                        SYS_ResetModule(UART4_RST);
                        UART_Open(UART4, bound);//默认8个数据长度,无奇偶校验,1个停止位
                        UART_SetLine_Config(UART4,bound,WordLength,parity,stop_bits);//配置串口
                        //配置串口接收中断
                        UART_ENABLE_INT(UART4, UART_IER_RDA_IEN_Msk);
                        NVIC_EnableIRQ(UART4_IRQn);
                        break;
                case UART_5:
                        CLK_EnableModuleClock(UART5_MODULE);//使能串口时钟
                        CLK_SetModuleClock(UART5_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));//选择串口时钟源
                        //设置串口接收、发送引脚
                        SYS->GPB_MFP &= ~(SYS_GPA_MFP_PA1_Msk | SYS_GPA_MFP_PA0_Msk);
                        SYS->GPB_MFP |= SYS_GPA_MFP_PA1_UART5_RXD | SYS_GPA_MFP_PA0_UART5_TXD;
                        //复位串口
                        SYS_ResetModule(UART5_RST);
                        UART_Open(UART5, bound);//默认8个数据长度,无奇偶校验,1个停止位
                        UART_SetLine_Config(UART5,bound,WordLength,parity,stop_bits);//配置串口
                        //配置串口接收中断
                        UART_ENABLE_INT(UART5, UART_IER_RDA_IEN_Msk);
                        NVIC_EnableIRQ(UART5_IRQn);
                        break;
                case UART_6:
                        break;
                case UART_7:
                        break;
                default:
                        break;
        }
       
       

}
沙发
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

粉丝