找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1752|回复: 2
打印 上一主题 下一主题
收起左侧

用串口模拟仿真 STM32一直没有IDLE中断,请高手帮忙看看!

[复制链接]
跳转到指定楼层
楼主
ID:713367 发表于 2020-5-7 22:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用串口模拟仿真,通过串口接收到一帧数据后,一直没有IDLE中断。折腾好长时间也没发现问题在哪。

u8 rxbuffer[100]={0x00};
u8 txbuffer[100]={0x00};
u8 flag=0;
static int rx_count=0;

void usart_gpio_init(void)
{
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO , ENABLE);
                GPIO_InitTypeDef GPIO_InitStructure;
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
        
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
                GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void usart_init(void)
{
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);
                USART_InitTypeDef USART_InitStructure;
                USART_InitStructure.USART_BaudRate = 115200;
                USART_InitStructure.USART_WordLength = USART_WordLength_8b;
                USART_InitStructure.USART_StopBits = USART_StopBits_1;
                USART_InitStructure.USART_Parity = USART_Parity_No;
                USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None ;
                USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
                USART_Init(USART1, &USART_InitStructure);                 
                USART_Cmd(USART1, ENABLE);
        
                USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //使能接收中断
                USART_ITConfig(USART1,USART_IT_IDLE ,ENABLE); //使能空闲总线中断
                USART_ClearFlag(USART1,USART_FLAG_TC); //清除发送完成标志位
}

void usart_nvic_init(void)
{
                NVIC_InitTypeDef NVIC_InitStructure;
                NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
                NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn ;
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
                NVIC_Init(&NVIC_InitStructure);
}

void usart_config(void)
{
                usart_gpio_init();
                usart_init();
                usart_nvic_init();
}


//串口接收中断
void USART1_IRQHandler(void)                 //串口1中断服务程序
{                        
                if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE )!=RESET)//接收到一字节数据
                {        
                                rxbuffer[rx_count++]=USART_ReceiveData(USART1);
                                USART_ClearFlag(USART1,USART_IT_RXNE);
                                if(USART_GetFlagStatus(USART1, USART_FLAG_IDLE)!= RESET)  //接收到一帧数据
                                {                                
                                                USART1->SR;
                                                USART1->DR;
                                                flag=1;
                                                USART_ClearFlag(USART1, USART_FLAG_IDLE);
                                                usart1_send_onebyte(0x26);
                                }
                                //usart1_send_onebyte(0x27);
                                
                }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:328075 发表于 2022-4-27 11:00 | 只看该作者
中断程序写的有问题
回复

使用道具 举报

板凳
ID:282861 发表于 2022-5-7 14:38 | 只看该作者
中断程序应该用USART_GetITStatus(),但是我还是没有调成功,正在研究。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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