STM32 Usart2 一直进不了中断 为什么?

#include"main.h"#include"dio.h"#defineBuffer_lenth200uint8_tReciveBuffer[Buffer_lenth... #include "main.h"

#include "dio.h"

#define Buffer_lenth 200

uint8_t ReciveBuffer[Buffer_lenth]={0x00};

void USART2_init(u32 bound)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2时钟

GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2); //GPIOA2复用为USART2
GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2); //GPIOA3复用为USART2

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; //GPIOA2与GPIOA3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA2 PA3

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; //串口1中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //子优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化NVIC寄存器

USART_InitStructure.USART_BaudRate = bound; //波特率设置
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //字长为8位数据格式
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_Init(USART2,&USART_InitStructure); //初始化串口2

USART_ITConfig(USART2,USART_IT_IDLE,ENABLE); //打开空闲中断 接收1帧数据中断一次
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); //开启接收中断 接收一个字节中断一次

USART_Cmd(USART2,ENABLE); //使能串口2

}

void USART2_IRQHandler(void) //串口2中断服务程序
{

if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET) //接收中断
{
USART_ClearITPendingBit(USART2,USART_IT_RXNE);

ReciveBuffer[200]= USART_ReceiveData(USART2);

}
if(USART_GetITStatus(USART2,USART_IT_IDLE) != RESET)
{
USART2 -> SR;
USART2 -> DR;

}
}
展开
 我来答
一剑出血
高粉答主

2020-03-23 · 醉心答题,欢迎关注
知道大有可为答主
回答量:5.7万
采纳率:78%
帮助的人:1.7亿
展开全部
中断向量表里挂载了中断服务函数没有……
追问
·谢谢回答  中断服务函数有 是我硬件的问题导致的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式