[mw_shl_code=c,true]//?à??×???
typedef unsigned char bool;
typedef unsigned char u8;
typedef unsigned short u16;
#define True 1
#define False 0
//SET BIT. Example: a |= SETBIT0
enum
{
SETBIT0 = 0x0001, SETBIT1 = 0x0002, SETBIT2 = 0x0004, SETBIT3 = 0x0008,
SETBIT4 = 0x0010, SETBIT5 = 0x0020, SETBIT6 = 0x0040, SETBIT7 = 0x0080,
SETBIT8 = 0x0100, SETBIT9 = 0x0200, SETBIT10 = 0x0400, SETBIT11 = 0x0800,
SETBIT12 = 0x1000, SETBIT13 = 0x2000, SETBIT14 = 0x4000, SETBIT15 = 0x8000
};
//CLR BIT. Example: a &= CLRBIT0
enum
{
CLRBIT0 = 0xFFFE, CLRBIT1 = 0xFFFD, CLRBIT2 = 0xFFFB, CLRBIT3 = 0xFFF7,
CLRBIT4 = 0xFFEF, CLRBIT5 = 0xFFDF, CLRBIT6 = 0xFFBF, CLRBIT7 = 0xFF7F,
CLRBIT8 = 0xFEFF, CLRBIT9 = 0xFDFF, CLRBIT10 = 0xFBFF, CLRBIT11 = 0xF7FF,
CLRBIT12 = 0xEFFF, CLRBIT13 = 0xDFFF, CLRBIT14 = 0xBFFF, CLRBIT15 = 0x7FFF
};
//CHOSE BIT. Example: a = b&CHSBIT0
enum
{
CHSBIT0 = 0x0001, CHSBIT1 = 0x0002, CHSBIT2 = 0x0004, CHSBIT3 = 0x0008,
CHSBIT4 = 0x0010, CHSBIT5 = 0x0020, CHSBIT6 = 0x0040, CHSBIT7 = 0x0080,
CHSBIT8 = 0x0100, CHSBIT9 = 0x0200, CHSBIT10 = 0x0400, CHSBIT11 = 0x0800,
CHSBIT12 = 0x1000, CHSBIT13 = 0x2000, CHSBIT14 = 0x4000, CHSBIT15 = 0x8000
};
/* INCLUDES */
//MCU
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_exti.h"
//?è??PB10×??? STM32-MINI??·?°???LED????
void SetPB10(bool sta)
{
static bool StartFlag = True;
if(StartFlag)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
StartFlag = False;
}
if(!sta)
GPIO_SetBits(GPIOB, GPIO_Pin_10);
else
GPIO_ResetBits(GPIOB, GPIO_Pin_10);
}
//???????????? ????PB8
void ExtINTConfig(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
//????????????
EXTI_DeInit();
//??PB???±??
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
//IO???? PB8 ????????
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//PB8???????? ?è??
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);
EXTI_InitStructure.EXTI_Line = EXTI_Line8;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //????????·?
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
//??????????
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
//???????????í
void EXTI9_5_IRQHandler(void)
{
static bool flag = 0;
//??????×???
if(EXTI_GetITStatus(EXTI_Line8))
{
//????????
EXTI_ClearFlag(EXTI_Line8); //????±ê????
EXTI_ClearITPendingBit(EXTI_Line8);
//???????????í
SetPB10(flag);
flag = !flag;
}
}
/*-------------------------------------------------------------------------------------------------------
* ???ò??????????
* ±????ò?¨??PB8???????? ±???LED×???(??PB8??????3.3V LED????·??ú×?????±?)
* STM32?? 3.3V?©?? ??5V??????MCU
-------------------------------------------------------------------------------------------------------*/
int main(void)
{
//--------------------------- CLK INIT, HSE PLL ----------------------------
ErrorStatus HSEStartUpStatus;
//RCC reset
RCC_DeInit();
//?????????±?? ????????????
RCC_HSEConfig(RCC_HSE_ON);
//?????????±??×?±???
HSEStartUpStatus = RCC_WaitForHSEStartUp();
//?????§°? ??????????
while(HSEStartUpStatus == ERROR);
//?è??????×????±??
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
//?????±????8M ????±?????72M
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08);
//----------------------------- CLOSE HSI ---------------------------
//??±??????±??HSI
RCC_HSICmd(DISABLE);
//??PB???±??
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//???????? 2-level interrupt
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//??×?????
__enable_irq();
//????????????
ExtINTConfig();
//????????
while(1);
}
[/mw_shl_code]
注释好像都乱码了……忽略注释吧,反正是下降沿触发,但是实际图是这样的
channel1是 按键
channel2是 led
不全是下降沿触发的呀 |