野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8318|回复: 2

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

[复制链接]
发表于 2018-6-1 00:54:31 | 显示全部楼层 |阅读模式
//程序第一次下载后可以运行也能进入中断,但是 当我按下 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);  //等待数据发送完毕
        }
    }
}


回复

使用道具 举报

发表于 2018-6-1 09:05:59 | 显示全部楼层
有可能是因为板子上的usb转串口芯片电路会影响这个
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-1 09:36:18 | 显示全部楼层
贡慧丽 发表于 2018-6-1 09:05
有可能是因为板子上的usb转串口芯片电路会影响这个

谢谢回帖,我已经找到问题了.我把RCC_APB2PeriphClockCmd()的函数写了但是没有调用,所以才会这样的.把这个函数一调用就好了.我太粗心了...
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-21 00:48 , Processed in 0.029661 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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