初级会员

- 积分
- 129
- 金钱
- 129
- 注册时间
- 2015-10-8
- 在线时间
- 18 小时
|
原代码分享如下:
#include "it.h"
#include "delay.h"
/*
函数名:it_init()
函数功能:中断初始化函数
形参:无
返回值:无
备注:
硬件: PB0:led1 推挽上拉输出
PB1:led0 推挽上拉输出
PA0: WK_UP 下拉输入
PC13:key2 上拉输入
PH2: key1 上拉输入
PH3: key0 上拉输入
软件: 代码流程:
1. 初始化各GPIO口
2. 初始化EXTI配置
3. 初始化NVIC配置
4. 中断服务函数
5. 主函数。
*/
void it_init()
{
uint32_t i;
/**************GPIO 初始化************/
//打开GPIO口的时钟源
RCC->AHB1ENR |=(0x87<<0);
//GPIO口PA0的模式,输出类型,输出速度,上/下拉配置
GPIOA->MODER &=~(3<<0);
GPIOA->MODER |=(1<<0);
GPIOA->OTYPER&=~(1<<0);
GPIOA->OSPEEDR&=~(3<<0);
GPIOA->OSPEEDR|=(3<<0);
GPIOA->PUPDR &=~(3<<0);
GPIOA->PUPDR |=(2<<0);
//GPIO口PB0、PB1的模式,输出类型,输出速度,上/下拉配置
GPIOB->MODER &=~(0xf<<0);
GPIOB->MODER |=(0x5<<0);
GPIOB->OTYPER&=~(3<<0);
GPIOB->OSPEEDR&=~(0xf<<0);
GPIOB->OSPEEDR|=(0xf<<0);
GPIOB->PUPDR &=~(0xf<<0);
GPIOB->PUPDR |=(0x5<<0);
//GPIO口PC13的模式,输出类型,输出速度,上/下拉配置
GPIOC->MODER &=~(0x3<<26);
GPIOC->PUPDR &=~(0x3<<26);
GPIOC->PUPDR |=(0x1<<26);
//GPIO口PH2、PH3的模式,输出类型,输出速度,上/下拉配置
GPIOH->MODER &=~(0xf<<4);
GPIOH->PUPDR &=~(0xf<<4);
GPIOH->PUPDR |=(0x5<<4);
/****************EXTI中断配置***************************/
//EXTI3_key0_PH3中断配值配值
RCC->APB2ENR |=(1<<14);
i=(0x05FA0000|0x500);
SCB->AIRCR =i;
EXTI->IMR &=~(1<<3);
EXTI->IMR |=(1<<3);
EXTI->FTSR|=(1<<3);
SYSCFG->EXTICR[0] |=(0x7<<12);
NVIC->ISER[0] |=(1<<9);
NVIC->IP[9]=0xA0;
//EXTI2—key1_PH2中断配置
EXTI->IMR &=~(1<<2);
EXTI->IMR |=(1<<2);
EXTI->FTSR|=(1<<2);
SYSCFG->EXTICR[0] |=(0x7<<8);
NVIC->ISER[0] |=(1<<8);
NVIC->IP[8]=0xE0;
//EXTI15-10—key2_PC13中断配置
EXTI->IMR &=~(1<<13);
EXTI->IMR |=(1<<13);
EXTI->FTSR|=(1<<13);
SYSCFG->EXTICR[3] |=(0x7<<4);
NVIC->ISER[1] |=(1<<8);
NVIC->IP[40]=0xF0;
}
/*
函数名:EXTI2_IRQHandler
函数功能:中断线2服务函数
形参:无
返回值:无
备注:
硬件: PB0:led1 推挽上拉输出
PB1:led0 推挽上拉输出
PA0: WK_UP 下拉输入
PC13:key2 上拉输入
PH2: key1 上拉输入
PH3: key0 上拉输入
软件: 代码流程:
1. 初始化各GPIO口
2. 初始化EXTI配置
3. 初始化NVIC配置
4. 中断服务函数
5. 主函数。
*/
void EXTI2_IRQHandler()
{
delay_ms(10);
if(EXTI->PR&0x1<<2)
{
ledg_0;
delay_ms(500);
ledg_1;
delay_ms(500);
}
EXTI->PR |=(1<<2);
}
void EXTI3_IRQHandler()
{
delay_ms(10);
if(GPIOH->IDR&0x1<<3)
{
ledr_0;
delay_ms(500);
ledr_1;
delay_ms(500);
}
EXTI->PR |=(1<<3);
}
void EXTI15_10_IRQHandler()
{
delay_ms(10);
if(GPIOC->IDR&0x1<<13)
{
ledg_0;
ledr_0;
delay_ms(500);
ledg_1;
ledr_1;
delay_ms(500);
}
EXTI->PR |=(1<<13);
}
请大家讨论
|
|