你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 7965|回复: 7

无法进入中断接收程序

[复制链接]

2

主题

0

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-4-21 14:53:31 | 显示全部楼层 |阅读模式
串口始终无法进入中断接收子程序,但是要是在main()里的for(;;)循环里头刚开始加入USART1_Putc(‘c’);就会一直进入接收中断子程序,并且串口调试助手就会无限循环输出“获取到串口1数据:”,当我发数据给它的话毫无反应哈,不知道怎么回事,你们看看:int main(void){    ChipHalInit();            //片内硬件初始化    ChipOutHalInit();        //片外硬件初始化        for(;;)    {            //串口2使用中断方式置位标志        if(Uart1_Get_Flag)        {            Uart1_Get_Flag=0;            USART1_Puts("\r\n获取到串口1数据:");            USART1_Putc(Uart1_Get_Data);            USART1_Puts("\r\n");        }            }}------------void USART1_IRQHandler(void){    //接收中断    if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET)    {        USART_ClearITPendingBit(USART1,USART_IT_RXNE);        Uart1_Get_Data=USART_ReceiveData(USART1);        Uart1_Get_Flag=1;        }        //溢出-如果发生溢出需要先清空SR的溢出位,再读DR寄存器 则可清除不断入中断的问题    if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET)    {        USART_ClearFlag(USART1,USART_FLAG_ORE);    //清溢出位        USART_ReceiveData(USART1);                //读DR    }}-----void USART_Configuration(void){    GPIO_InitTypeDef GPIO_InitStructure;    USART_InitTypeDef USART_InitStructure;    USART_ClockInitTypeDef USART_ClockInitStructure;        //使能串口1,PA,AFIO总线    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |             RCC_APB2Periph_AFIO |            RCC_APB2Periph_USART1 ,             ENABLE);    /* A9 USART1_Tx */    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //推挽输出-TX    GPIO_Init(GPIOA, &GPIO_InitStructure);    /* A10 USART1_Rx  */    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入-RX    GPIO_Init(GPIOA, &GPIO_InitStructure);    USART_InitStructure.USART_BaudRate = 9600;    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_Rx | USART_Mode_Tx;        USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;    USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;    USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;    USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;    USART_ClockInit(USART1, &USART_ClockInitStructure);        USART_Init(USART1, &USART_InitStructure);    /* Enable the USARTx */    USART_Cmd(USART1, ENABLE);    USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);}void USART1_Putc(unsigned char c){    USART_SendData(USART1, c);    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );}void USART1_Puts(char * str){    while(*str)    {        USART_SendData(USART1, *str++);        /* Loop until the end of transmission */        while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);    }}-----------------void NVIC_Configuration(void)
{
 NVIC_InitTypeDef NVIC_InitStructure;
 
 /* Configure one bit for preemption priority */
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
 
 /*UART2*/
 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure);
}
回复

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-4-21 17:10:09 | 显示全部楼层

RE:无法进入中断接收程序

没有初始化串口、NVIC
回复 支持 0 反对 1

使用道具 举报

7

主题

62

回帖

0

蝴蝶豆

新手上路

最后登录
2020-6-1
发表于 2011-4-21 15:09:50 | 显示全部楼层

RE:无法进入中断接收程序

兄弟好像串口时钟没使能吧
回复 支持 反对

使用道具 举报

19

主题

184

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2011-4-21 16:02:19 | 显示全部楼层

RE:无法进入中断接收程序

中断配置对不??
回复 支持 反对

使用道具 举报

7

主题

62

回帖

0

蝴蝶豆

新手上路

最后登录
2020-6-1
发表于 2011-4-21 19:18:01 | 显示全部楼层

RE:无法进入中断接收程序

还有个原因是你串口2、3脚搞短接了,你发送的时候会进中断?
回复 支持 反对

使用道具 举报

16

主题

121

回帖

0

蝴蝶豆

初级会员

最后登录
2020-8-5
发表于 2011-4-22 23:31:56 | 显示全部楼层

RE:无法进入中断接收程序

串口无非就是以下几个步骤:
1:GPIO口设置TXD,RXD;
2.USARTX和对应GPIO口时钟使能;
3.USARTX全局中断NVIC设置
4.USART初始化设置包括波特率等;
5.使能USARTX外设,接收中断使能,发送中断使能
从你的程序没看出什么问题就一个地方NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;这里的USART1_IRQn应该不是这样写,除非你自己定义要不然应该是USART1_IRQChannel;
,你再看看你自己的初始化程序吧,应该漏掉以上的哪部分的.
回复 支持 反对

使用道具 举报

0

主题

5

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2013-3-23 16:03:57 | 显示全部楼层

回复:无法进入中断接收程序

回复第 6 楼 于2011-04-22 23:31:56发表:
串口无非就是以下几个步骤:
1:GPIO口设置TXD,RXD;
2.USARTX和对应GPIO口时钟使能;
3.USARTX全局中断NVIC设置
4.USART初始化设置包括波特率等;
5.使能USARTX外设,接收中断使能,发送中断使能
从你的程序没看出什么问题就一个地方NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;这里的USART1_IRQn应该不是这样写,除非你自己定义要不然应该是USART1_IRQChannel;
,你再看看你自己的初始化程序吧,应该漏掉以上的哪部分的.
 
第5点说错了, USART1_IRQn是3.X固件写法,你说的是2.0的
 
回复 支持 反对

使用道具 举报

0

主题

13

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2013-3-24 23:56:14 | 显示全部楼层

RE:无法进入中断接收程序

void USART1_IRQHandler(void)
这里错了!
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版