EIC_IRQInitStructure.EIC_IRQChannelPriority = 3;
EIC_IRQInitStructure.EIC_IRQChannelCmd = ENABLE; EIC_IRQInit(&EIC_IRQInitStructure);
EIC_IRQInitStructure.EIC_IRQChannel = ADC_IRQChannel; EIC_IRQInitStructure.EIC_IRQChannelPriority = 10; EIC_IRQInit(&EIC_IRQInitStructure); EIC_IRQCmd(ENABLE); }
3.通用定时器计数子程序:
#include \
TB_InitTypeDef TB_InitStructure; ErrorStatus OSC4MStartUpStatus; void MRCC_Configuration(void); void EIC_Configuration(void); void main() {
#ifdef DEBUG debug(); #endif
MRCC_Configuration(); GPIO_Configuration(); EIC_Configuration();
TB_InitStructure.TB_Mode = TB_Mode_Timing;
TB_InitStructure.TB_ClockSource = TB_ClockSource_CKTIM;
TB_InitStructure.TB_Prescaler = 239; TB_InitStructure.TB_CounterMode = TB_CounterMode_Up;
TB_InitStructure.TB_AutoReload = 999; TB_Init(&TB_InitStructure);
TB_ITConfig(TB_IT_Update, ENABLE); TB_Cmd(ENABLE); while(1); }
void MRCC_Configuration(void) {
MRCC_DeInit();
OSC4MStartUpStatus = MRCC_WaitForOSC4MStartUp(); if(OSC4MStartUpStatus == SUCCESS) {
MRCC_HCLKConfig(MRCC_CKSYS_Div1); MRCC_CKTIMConfig(MRCC_HCLK_Div1); MRCC_PCLKConfig(MRCC_CKTIM_Div2);
CFG_FLASHBurstConfig(CFG_FLASHBurst_Enable);
MRCC_CKSYSConfig(MRCC_CKSYS_OSC4MPLL, MRCC_PLL_Mul_15);
}
MRCC_IOVoltageRangeConfig(MRCC_IOVoltageRange_3V3);
MRCC_PeripheralClockConfig(MRCC_Peripheral_TB | MRCC_Peripheral_GPIO, ENABLE); }
void EIC_Configuration(void) {
EIC_IRQInitTypeDef EIC_IRQInitStructure;
EIC_IRQInitStructure.EIC_IRQChannel = TB_IRQChannel; EIC_IRQInitStructure.EIC_IRQChannelPriority = 1;
EIC_IRQInitStructure.EIC_IRQChannelCmd = ENABLE; EIC_IRQInit(&EIC_IRQInitStructure); EIC_IRQCmd(ENABLE); }
4.流水灯子程序:
#include \
GPIO_InitTypeDef GPIO_InitStructure; ErrorStatus OSC4MStartUpStatus; void MRCC_Configuration(void); static void Delay(u32 nCount); u32 a=0; int main() {
#ifdef DEBUG debug(); #endif
MRCC_Configuration();
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 |GPIO_Pin_12 | GPIO_Pin_13 ;
GPIO_Init(GPIO0, &GPIO_InitStructure);
GPIO_PinMaskConfig(GPIO0, ~(GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_12| GPIO_Pin_13), ENABLE);
GPIO_Write(GPIO0, 0x00); while(1) {
GPIO_WriteBit(GPIO0, GPIO_Pin_8, Bit_SET); GPIO_WriteBit(GPIO0, GPIO_Pin_9, Bit_RESET); GPIO_WriteBit(GPIO0, GPIO_Pin_12, Bit_RESET); Delay(0xffFFF);
GPIO_WriteBit(GPIO0, GPIO_Pin_8, Bit_RESET); GPIO_WriteBit(GPIO0, GPIO_Pin_9, Bit_SET); GPIO_WriteBit(GPIO0, GPIO_Pin_12, Bit_RESET); Delay(0xfFFFF);
GPIO_WriteBit(GPIO0, GPIO_Pin_8, Bit_RESET); GPIO_WriteBit(GPIO0, GPIO_Pin_9, Bit_RESET); GPIO_WriteBit(GPIO0, GPIO_Pin_12, Bit_SET); Delay(0xfFFFF);
GPIO_WriteBit(GPIO0, GPIO_Pin_8, Bit_RESET); GPIO_WriteBit(GPIO0, GPIO_Pin_9, Bit_RESET); GPIO_WriteBit(GPIO0, GPIO_Pin_12, Bit_RESET); GPIO_WriteBit(GPIO0, GPIO_Pin_13, Bit_SET); Delay(0xfFFFF); } }
void MRCC_Configuration(void) {
MRCC_DeInit();
OSC4MStartUpStatus = MRCC_WaitForOSC4MStartUp();
if(OSC4MStartUpStatus == SUCCESS) {
MRCC_HCLKConfig(MRCC_CKSYS_Div2); MRCC_CKTIMConfig(MRCC_HCLK_Div2); MRCC_PCLKConfig(MRCC_CKTIM_Div1);
MRCC_CKSYSConfig(MRCC_CKSYS_OSC4MPLL, MRCC_PLL_Mul_15); }
MRCC_IOVoltageRangeConfig(MRCC_IOVoltageRange_3V3);
MRCC_PeripheralClockConfig(MRCC_Peripheral_GPIO, ENABLE); }
static void Delay(u32 nCount) {
u32 j = 0;
for(j = nCount; j != 0; j--); }
4. 中断服务子程序:
#include \
u8 pit=0,con=0,biao=0;
void USART1_IRQHandler(void) {
char che;
DisableInterrupts; / che = uart_getchar (UART1);
printf(\你发送的字符为: %c\\n\\n\
con=che;
EnableInterrupts; } #if 1
void PIT0_IRQHandler(void) {
LED_turn(LED1); PIT_Flag_Clear(PIT0); pit=1; } #else
extern u32 test_time;
void PIT0_IRQHandler(void) {
test_time++;
PIT_Flag_Clear(PIT0); }
#endif
void PORTA_IRQHandler() {
u8 n=0; n = 19;
if(PORTA_ISFR & (1 << n)) {
PORTA_ISFR |= (1 << n); con='0';
if (biao) printf(\关闭功能2\\n\ } n = 26;
if(PORTA_ISFR & (1 << n)) {
PORTA_ISFR |= (1 << n); con='2';printf(\开启功能2\\n\ biao=1;
//LED_turn(LED1); } }
5. 主程序:
/
#include \ void display( u16 result ); extern u8 con,pit,biao;
u8 dis_code[12]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,
0x7D,0x07,0x7F,0x6F,0x80,0xFF }; void main() {
char ch;
u8 ADresult,conn,i,j; u16 count; DisableInterrupts; LED_INIT();
pit_init_ms(PIT0,200); uart_init (UART1, 115200); adc_init (ADC0, SE17); gpio_init (PORTB,20,GPO,1); gpio_init (PORTB,21,GPO,1); gpio_init (PORTB,22,GPO,1); gpio_init (PORTB,23,GPO,1); exti_init(PORTA,26,rising_down); exti_init(PORTA,19,rising_down); for(i = 0;i< 8;i++) {
gpio_init (PORTD,i,GPO,1); }
EnableInterrupts ; disable_irq(68);
uart_irq_EN (UART1);
printf(\请输入控制字节: \\n\
while(1) {
if(conn!=con) {count=0;disable_irq(68);} conn=con; switch(conn)
{ case '1':printf(\串口回显功能\\n\ ch=uart_getchar(UART1);
printf(\你发送的字符为: %c\\n\\n\ break;
case '2':if(j==1) printf(\采样传送功能\\n\
ADresult=ad_ave(ADC0 ,SE17, ADC_8bit , 3);j++; if(con=='2'&&j>100)
{j=0; printf(\结果为 :%d\\n\\n\ display(ADresult); break;