OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2521|回复: 3

请教:使用32F1两个串口USART2与USART2,发现只有USART2可以正常使用,串口三和串口一都不行,无法进入中断接收服务...

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2019-12-21
在线时间
15 小时
发表于 2020-4-13 19:46:39 | 显示全部楼层 |阅读模式
20金钱



void USART3_Init(u32 bout)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        NVIC_InitStructure.NVIC_IRQChannel=USART3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
        NVIC_Init(&NVIC_InitStructure);
       
        USART_InitStructure.USART_BaudRate=bout;
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
        USART_InitStructure.USART_Parity=USART_Parity_No;
        USART_InitStructure.USART_StopBits=USART_StopBits_1;
        USART_InitStructure.USART_WordLength=USART_WordLength_8b;
        USART_Init(USART3,&USART_InitStructure);
       
        USART_Cmd(USART3,ENABLE);
        USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);

}

void USART2_Init(u32 bout)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
        NVIC_Init(&NVIC_InitStructure);
       
        USART_InitStructure.USART_BaudRate=bout;
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
        USART_InitStructure.USART_Parity=USART_Parity_No;
        USART_InitStructure.USART_StopBits=USART_StopBits_1;
        USART_InitStructure.USART_WordLength=USART_WordLength_8b;
        USART_Init(USART2,&USART_InitStructure);
       
        USART_Cmd(USART2,ENABLE);
        USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
}

void USART3_Sendstring(u8*str)
{
        u8 index=0;
        do
        {
                USART_SendData(USART3,str[index]);
                while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==0);
                index++;
        }
        while(str[index]!=0);
}

void USART2_Sendstring(u8*str)
{
        u8 index=0;
        do
        {
                USART_SendData(USART2,str[index]);
                while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==0);
                index++;
        }
        while(str[index]!=0);
}





u8 Rx_BUF_THREE[64];
u8 Rx_OVER_THREE;
u8 Rx_cont_THREE;

u8 Rx_BUF_TWO[64];
u8 Rx_OVER_TWO;
u8 Rx_cont_TWO;




        if(USART_GetITStatus(USART3,USART_IT_RXNE)==1)
        {
                USART_ClearITPendingBit(USART3,USART_IT_RXNE);
               
                temp=USART_ReceiveData(USART3);
               
                if(temp=='\n')
                {
                        Rx_cont_THREE=0;
                        Rx_OVER_THREE=1;
                        USART_ITConfig(USART3,USART_IT_RXNE,DISABLE);
                }
                else
                {
                        Rx_BUF_THREE[Rx_cont_THREE]=temp;
                        Rx_cont_THREE++;
                }
        }
}

void USART2_IRQHandler(void)
{
        u8 temp=0;
       
        if(USART_GetITStatus(USART2,USART_IT_RXNE)==1)
        {
                USART_ClearITPendingBit(USART2,USART_IT_RXNE);
               
                temp=USART_ReceiveData(USART2);
               
                if(temp=='\n')
                {
                        Rx_cont_TWO=0;
                        Rx_OVER_TWO=1;
                        USART_ITConfig(USART2,USART_IT_RXNE,DISABLE);
                }
                else
                {
                        Rx_BUF_TWO[Rx_cont_TWO]=temp;
                        Rx_cont_TWO++;
                }
        }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2019-12-21
在线时间
15 小时
 楼主| 发表于 2020-4-13 19:51:28 | 显示全部楼层
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2019-12-21
在线时间
15 小时
 楼主| 发表于 2020-4-14 15:13:34 | 显示全部楼层
继续顶
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10569
金钱
10569
注册时间
2017-2-18
在线时间
1913 小时
发表于 2020-4-14 15:17:59 | 显示全部楼层
串口123的抢占优先级改为2  
串口123的子优先级分别改为1 2 3试试
且中断分组设置为2位抢占优先级2位子优先级
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 06:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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