打印

开发板重启或者复位后无法进入中断

[复制链接]
479|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
冷冻链|  楼主 | 2020-4-25 13:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//程序第一次下载后可以运行也能进入中断,但是 当我按下 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);  //等待数据发送完毕
        }
    }
}

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

397

主题

397

帖子

0

粉丝