主函数:
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "exti.h"
int main(void)
{
Clock_Init(9);
delay_init(72);
LED_Init();
EXTIX_Init();
LED0=0;
while(1)
{
}
}
LED函数:
#include "led.h"
void LED_Init(void)
{
//Enable B E
RCC->APB2ENR|=1<<3;
RCC->APB2ENR|=1<<6;
//B
GPIOB->CRL&=0XFF0FFFFF;
GPIOB->CRL|=0X00300000;
GPIOB->ODR|=1<<5; //high level
//E
GPIOE->CRL&=0XFF0FFFFF;
GPIOE->CRL|=0X00300000;
GPIOE->ODR|=1<<5; //high level
}
中断模块
#include "exti.h"
#include "delay.h"
#include "led.h"
#include "key.h"
void EXTI3_IRQHandler(void)
{
delay_ms(10);
if(KEY1==0)
{
LED1=!LED1;
}
EXTI->PR=1<<3;
}
void EXTI4_IRQHandler(void)
{
delay_ms(10);
if(KEY0==0)
{
LED0=!LED0;
LED1=!LED1;
}
EXTI->PR=1<<4;
}
void EXTIX_Init(void)
{
KEY_Init();
Ex_NVIC_Config(GPIO_E,3,FTIR);
Ex_NVIC_Config(GPIO_E,4,FTIR);
MY_NVIC_Init(2,1,EXTI3_IRQn,2);
MY_NVIC_Init(2,0,EXTI4_IRQn,2);
}
按键模块
void KEY_Init(void)
{
RCC->APB2ENR|=1<<2;
RCC->APB2ENR|=1<<6;
GPIOA->CRL&=0XFFFFFFF0;
GPIOA->CRL|=0X00000008;
GPIOE->CRL&=0XFFF000FF;
GPIOE->CRL|=0X00088800;
GPIOE->ODR|=7<<2;
}
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;
if(mode)key_up=1;
if(key_up&&(KEY0==0||KEY1==0))
{
delay_ms(10);
key_up=0;
if(KEY0==0)return 1;
else if(KEY1==0)return 2;
}else if(KEY0==1&&KEY1==1)key_up=1;
return 0;
}
时钟配置
void Clock_Init(u8 PLL)
{
unsigned char temp=0;
MYRCC_DeInit();
RCC->CR|=0x00010000;
while(!(RCC->CR>>17));
RCC->CFGR=0X00000400;
PLL-=2;
RCC->CFGR|=PLL<<18;
RCC->CFGR|=1<<16;
FLASH->ACR|=0x32;
RCC->CR|=0x01000000;
while(!(RCC->CR>>25));
RCC->CFGR|=0x00000002;
while(temp!=0x02)
{
temp=RCC->CFGR>>2;
temp&=0x03;
}
}
天水师范学院科技园信息技术服务工作室