//程序第一次下载后可以运行也能进入中断,但是 当我按下 RESET按键 或者断电重新上电之后就无法进入中断了 求解释?
//
#include"initialize.h"
#include"stm32f10x.h"
void RCC_config(void) //时钟配置
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //打开GPIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //打开USART1时钟
}
void GPIO_config(void) //GPIO配置
{
GPIO_InitTypeDef gpio_i;
//输出模式
gpio_i.GPIO_Pin=GPIO_Pin_9; //配置引脚
gpio_i.GPIO_Mode=GPIO_Mode_AF_PP; //配置模式
gpio_i.GPIO_Speed=GPIO_Speed_50MHz; //配置输出速率
GPIO_Init(GPIOA,&gpio_i); //初始化GPIO配置
//输入模式
gpio_i.GPIO_Pin=GPIO_Pin_10; //配置引脚
gpio_i.GPIO_Mode=GPIO_Mode_IN_FLOATING;//配置模式
GPIO_Init(GPIOA,&gpio_i); //初始化GPIO配置
}
void NVIC_config(void) //NVIC嵌套向量中断配置
{
NVIC_InitTypeDef nvic_i;
// NVIC_DeInit(); //
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //嵌套向量中断分组选择
nvic_i.NVIC_IRQChannel=USART1_IRQn; //配置中断源
nvic_i.NVIC_IRQChannelPreemptionPriority=0x02; //配置抢占优先级为2
nvic_i.NVIC_IRQChannelSubPriority=0x01; //配置相应优先级
nvic_i.NVIC_IRQChannelCmd=ENABLE; //使能中断
NVIC_Init(&nvic_i); //初始化NVIC嵌套向量中断
}
void USART_config(void)
{
USART_InitTypeDef usart_i;
GPIO_config(); //GPIO配置
USART_DeInit(USART1);
usart_i.USART_BaudRate=115200; //设置波特率为 115200
usart_i.USART_WordLength=USART_WordLength_8b; //设置数据字长为8字节
usart_i.USART_StopBits=USART_StopBits_1; //一个停止位
usart_i.USART_Parity=USART_Parity_No; //校验位为空(不使用校验位)
usart_i.USART_Mode=USART_Mode_Tx | USART_Mode_Rx; //配置模式为手法魔兽
usart_i.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//控制硬件流为空
USART_Init(USART1,&usart_i); //初始化USART1
NVIC_config(); //串口中断优先级配置
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //使能串口中断
USART_Cmd(USART1,ENABLE); //使能串口
}
int fputc(int ch,FILE *p)
{
USART_SendData(USART1,ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
return ch;
}
//串口1中断服务函数
void USART1_IRQHandler(void)
{
char temp[12]="Rheinmetal",i=0;
if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET) //判断是否发生了中断
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断
//USART_ReceiveData(USART1);
for(i=0;i<10;i++)
{
USART_SendData(USART1,temp); //给电脑发送数字
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET); //等待数据发送完毕
}
}
} |