OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4390|回复: 3

按键中断问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2013-12-12
在线时间
0 小时
发表于 2013-12-12 17:27:05 | 显示全部楼层 |阅读模式

我用的是ministm32的板子,我的LED0:PA8,   LED1:PD2,   KEY_UPA0。
程序:LED0与LED1运行的时候先点亮,然后按下KEY_UP以后全灭。
错误:坑爹的是按下KEY_UP以后板子没反应,反而按下KEY1的时候板子有反应,但也没有达到程序的效果,能不能帮我看下代码?
这是main.c里面的函数
/*Include---------------------------*/
#include"stm32f10x_lib.h"  //包含所有的头文件
#include<stdio.h>
//----------------函数声明--------------------
void Delay_MS(u16 dly);
void RCC_Configuration(void);
void GPIO_Configuration(void);
void Ls164_Send(u8 data);
void USART_Configuration(void);
void EXTI_Configuration(void);
void NVIC_Configuration(void);
/*******************************************************************************
* Function Name  : fputc
* Description    : 重定向(stdio)printf函数 文件流-》串口1 (USART1)
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
int fputc(int ch,FILE *f)//printf在打印的时候会调用fputc函数,把打印的东西转到一个文件那里,我们可以把打印的东西打印到串口1(USART1)
{
 //给USART1发送ch
 USART_SendData(USART1, ch);
 //等待发送完成
 while(!USART_GetFlagStatus(USART1, USART_FLAG_TC));
 return ch;
}

/*******************************************************************************
* Function Name  : main
* Description    : Main program.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
int main(void)
{
 
    /*GPIO初始化*/
 RCC_Configuration();//打开系统时钟
  GPIO_Configuration();
 NVIC_Configuration();
 EXTI_Configuration();
 /*GPIO通信*/
 while(1); 
 return 0;
}

///*******************************************************************************
//* Function Name  : Delay_Ms
//* Description    : delay 1 ms.
//* Input          : dly (ms)
//* Output         : None
//* Return         : None
//*******************************************************************************/
void Delay_MS(u16 dly)
{
 u16 i,j;
 for(i=0;i<dly;i++)
  for(j=1000;j>0;j--);
}
//
///*******************************************************************************
//* Function Name  : RCC_Configuration
//* Description    : Configures the different system clocks.
//* Input          : None
//* Output         : None
//* Return         : None
//*******************************************************************************/
void RCC_Configuration(void)
{
 //----------使用外部RC晶振-----------
 RCC_DeInit();   //初始化为缺省值
 RCC_HSEConfig(RCC_HSE_ON); //使能外部的高速时钟
 while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //等待外部高速时钟使能就绪
 
 //FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Enable Prefetch Buffer
 //FLASH_SetLatency(FLASH_Latency_2);  //Flash 2 wait state
 
 RCC_HCLKConfig(RCC_SYSCLK_Div1);  //HCLK = SYSCLK
 RCC_PCLK2Config(RCC_HCLK_Div1);   //PCLK2 =  HCLK
 RCC_PCLK1Config(RCC_HCLK_Div2);   //PCLK1 = HCLK/2
 RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 8MHZ * 9 =72MHZ
 RCC_PLLCmd(ENABLE);   //Enable PLLCLK

 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait till PLLCLK is ready
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //Select PLL as system clock
 while(RCC_GetSYSCLKSource()!=0x08);  //Wait till PLL is used as system clock source
 
 //---------打开相应外设时钟--------------------
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD,ENABLE); 
}
//
///*******************************************************************************
//* Function Name  : GPIO_Configuration
//* Description    : 初始化GPIO外设
//* Input          : None
//* Output         : None
//* Return         : None
//*******************************************************************************/
void GPIO_Configuration(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;//声明一个结构体就可以了
 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//设置引脚8
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度是10MHZ
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;//PA8为推挽输出
 GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化GPIOA.8

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;//设置引脚8
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度是10MHZ
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;//PA8为推挽输出
 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.8

  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);//PA15作为EXTI15
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//置引脚15
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度是10MHZ
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD  ;//PA15为下拉输入
 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.15 
  
}
void USART_Configuration(void)
{
    USART_InitTypeDef USART_InitStructure;//声明一个初始化的结构体,用来填充一些设置
    USART_InitStructure.USART_BaudRate = 19600;//波特率为9600
    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_Tx | USART_Mode_Rx;//发送使能
//    USART_InitStructure.USART_Clock = USART_Clock_Disable;
//    USART_InitStructure.USART_CPOL = USART_CPOL_High;
//    USART_InitStructure.USART_CPHA = USART_CPHA_1Edge;
//    USART_InitStructure.USART_LastBit = USART_LastBit_Enable;
    USART_Init(USART1, &USART_InitStructure);
 USART_Cmd(USART1, ENABLE);
}
void EXTI_Configuration(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 EXTI_InitTypeDef EXTI_InitStructure;

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//置引脚15
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度是10MHZ
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD  ;//PA15为下拉输入
 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.15 

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD,ENABLE); 
 //EXTI_DeInit();//先把EXTI各项设置为初省值
 /*填充EXTI结构体*/
 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);//PA15作为EXTI15
 EXTI_InitStructure.EXTI_Line = EXTI_Line0;//里选择为线15,因为PA15
 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断模式
 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//下降沿为触发方式
 EXTI_InitStructure.EXTI_LineCmd = ENABLE;
 EXTI_Init(&EXTI_InitStructure);

 /*清除中断标志位,这里是为了保险起见*/
 EXTI_ClearITPendingBit(EXTI_Line0);
}
void NVIC_Configuration(void)
{
 NVIC_InitTypeDef NVIC_InitStructure;

 //NVIC_DeInit();
 #ifdef VECT_TAB_RAM
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
 #else
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
 #endif
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
 NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;//设置10~15chanel为中断chanel,因为PA15
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure);  
}

这是stm32f10x_it.c里面的函数
void EXTI0_IRQHandler(void)
{
 GPIO_SetBits(GPIOA, GPIO_Pin_8);
 GPIO_SetBits(GPIOD, GPIO_Pin_2);
 Delay_MS(2000);
 EXTI_ClearITpendingBit(EXTI_Line0);
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-12 23:58:38 | 显示全部楼层
回复【楼主位】fuckyou:
---------------------------------
代码没问题,我怀疑是不是下错代码了?
你可以下载我们的标准例程测试下先.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2013-12-12
在线时间
0 小时
 楼主| 发表于 2013-12-16 17:17:28 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
请问下,这个问题跟我用JTAG没用SW有没有关系
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-16 23:30:05 | 显示全部楼层
回复【3楼】fuckyou:
---------------------------------
你不能插着JTAG!!!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 07:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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