stm32入门系列程序
2013-07-10 16:22
134 查看
折腾了两三天,程序终于下载到了stm32的开发办上面去了。
一开始是因为没有设置正确,同时可能是因为自己使用的MDK和j link驱动的版本太低,所以用MDK下载不进去。后来将软件更新,采用新的版本,下载进去后却发现好像并没有运行。原来,每次下载完必须重新启动一下开发板才可以。为了明白这些道理又浪费了我好几天的时间。总之,还是独自一个人在黑暗中摸索。废话少说,代码如下:流水灯
外部中断GPIOA_3main.c文件
stm32f10x_it.c文件
使用外部中断3须作出的准备有:
独立看门狗试验main.c文件
stm32f10x_it.c文件
窗口看门狗
基于大虾网的DX32修改例程代码如下:
一开始是因为没有设置正确,同时可能是因为自己使用的MDK和j link驱动的版本太低,所以用MDK下载不进去。后来将软件更新,采用新的版本,下载进去后却发现好像并没有运行。原来,每次下载完必须重新启动一下开发板才可以。为了明白这些道理又浪费了我好几天的时间。总之,还是独自一个人在黑暗中摸索。废话少说,代码如下:流水灯
/******************************************************************************* * File Name : main.c * Author : Wuhan R&D Center, Embest * Date First Issued : 08/08/2008 * Description : Main program body ********************************************************************************/ /* Includes ------------------------------------------------------------------*/ #include "stm32f10x_lib.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ #define ADC1_DR_Address ((u32)0x4001244C) unsigned short int ADC_ConvertedValue; GPIO_InitTypeDef GPIO_InitStructure; ADC_InitTypeDef ADC_InitStructure; DMA_InitTypeDef DMA_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; ErrorStatus HSEStartUpStatus; extern vu32 TimingDelay; /* Private function prototypes -----------------------------------------------*/ void RCC_Configuration(void); void NVIC_Configuration(void); void GPIO_Configuration(void); void Delay(vu32 nTime); void SysTick_Configuration(void); void SetupLED (void) ; extern void SetupADC (void); /* Private functions ---------------------------------------------------------*/ /******************************************************************************* * Function Name : main * Description : Main program. * Input : None * Output : None * Return : None *******************************************************************************/ int main(void) { #ifdef DEBUG debug(); #endif /* Configure the system clocks */ RCC_Configuration(); SysTick_Configuration(); /* NVIC Configuration */ NVIC_Configuration(); /* Configure the GPIO ports */ GPIO_Configuration(); /* Connect EXTI Line9 to PB.9 */ GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9); /* Configure EXTI Line9 to generate an interrupt on falling edge */ EXTI_InitStructure.EXTI_Line = EXTI_Line9; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); for(;;) { GPIOC->ODR = 0xfffffc4f; Delay(80); GPIOC->ODR = 0xfffffc8f; Delay(80); GPIOC->ODR = 0xfffffd0f; Delay(80); GPIOC->ODR = 0xfffffe0f; Delay(80); } } /******************************************************************************* * Function Name : SysTick_Configuration * Description : Configures the SysTick to generate an interrupt each 1 millisecond. * Input : None * Output : None * Return : None *******************************************************************************/ void SysTick_Configuration(void) { /* Select AHB clock(HCLK) as SysTick clock source */ SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); /* Set SysTick Priority to 3 */ NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, 3, 0); /* SysTick interrupt each 1ms with HCLK equal to 72MHz */ SysTick_SetReload(72000); /* Enable the SysTick Interrupt */ SysTick_ITConfig(ENABLE); } /******************************************************************************* * Function Name : RCC_Configuration * Description : Configures the different system clocks. * Input : None * Output : None * Return : None *******************************************************************************/ void RCC_Configuration(void) { /* RCC system reset(for debug purpose) */ RCC_DeInit(); /* Enable HSE */ RCC_HSEConfig(RCC_HSE_ON); /* Wait till HSE is ready */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus == SUCCESS) { /* HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK2 = HCLK */ RCC_PCLK2Config(RCC_HCLK_Div1); /* PCLK1 = HCLK/2 */ RCC_PCLK1Config(RCC_HCLK_Div2); /* Flash 2 wait state */ FLASH_SetLatency(FLASH_Latency_2); /* Enable Prefetch Buffer */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* PLLCLK = 8MHz * 9 = 72 MHz */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* Enable PLL */ RCC_PLLCmd(ENABLE); /* Wait till PLL is ready */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { } /* Select PLL as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* Wait till PLL is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x08) { } } /* Enable GPIOB, GPIOC and AFIO clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE); } /******************************************************************************* * Function Name : NVIC_Configuration * Description : Configures Vector Table base location. * Input : None * Output : None * Return : None *******************************************************************************/ void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; #ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); #else /* VECT_TAB_FLASH */ /* Set the Vector Table base location at 0x08000000 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); #endif /* Configure one bit for preemption priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); /* Enable the EXTI9_5 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /******************************************************************************* * Function Name : GPIO_Configuration * Description : Configures the different GPIO ports. * Input : None * Output : None * Return : None *******************************************************************************/ void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Configure PC. as Output push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); /* Configure PB9 as input floating (EXTI Line9) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructure); } /******************************************************************************* * Function Name : Delay * Description : Inserts a delay time. * Input : nTime: specifies the delay time length, in milliseconds. * Output : None * Return : None *******************************************************************************/ void Delay(u32 nTime) { /* Enable the SysTick Counter */ SysTick_CounterCmd(SysTick_Counter_Enable); TimingDelay = nTime; while(TimingDelay != 0); /* Disable the SysTick Counter */ SysTick_CounterCmd(SysTick_Counter_Disable); /* Clear the SysTick Counter */ SysTick_CounterCmd(SysTick_Counter_Clear); } /******************************************************************************* * Function Name : Delay * Description : Inserts a delay time. * Input : nCount: specifies the delay time length. * Output : None * Return : None *******************************************************************************/ /* void Delay(vu32 nCount) { for(; nCount != 0; nCount--); } */ #ifdef DEBUG /******************************************************************************* * Function Name : assert_failed * Description : Reports the name of the source file and the source line number * where the assert error has occurred. * Input : - file: pointer to the source file name * - line: assert error line source number * Output : None * Return : None *******************************************************************************/ void assert_failed(u8* file, u32 line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infinite loop */ while (1) { } } #endif /******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/ |
配置GPIO GPIO_InitTypeDef GPIO_InitStructure; /* Configure PA. as Output push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); I/O操作 GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)0X01); //向GPIOA0写入1 Delay(1000); GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)0X00); //向GPIOA0写入0 Delay(1000); GPIO_WriteBit(GPIOA,GPIO_Pin_1,(BitAction)0X01); //向GPIOA1写入1 Delay(1000); GPIO_WriteBit(GPIOA,GPIO_Pin_1,(BitAction)0X00); //向GPIOA1写入0 Delay(1000); |
/******************************************************************************* * File Name : main.c * Author : Wuhan R&D Center, Embest * Date First Issued : 08/08/2008 * Description : Main program body ********************************************************************************/ /* Includes ------------------------------------------------------------------*/ #include "stdio.h" #include "stm32f10x_lib.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ #define ADC1_DR_Address ((u32)0x4001244C) unsigned short int ADC_ConvertedValue; GPIO_InitTypeDef GPIO_InitStructure; ADC_InitTypeDef ADC_InitStructure; DMA_InitTypeDef DMA_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; ErrorStatus HSEStartUpStatus; extern vu32 TimingDelay; /* Private function prototypes -----------------------------------------------*/ void RCC_Configuration(void); void NVIC_Configuration(void); void GPIO_Configuration(void); void Delay(vu32 nTime); void SysTick_Configuration(void); void SetupLED (void) ; extern void SetupADC (void); /* Private functions ---------------------------------------------------------*/ /******************************************************************************* * Function Name : main * Description : Main program. * Input : None * Output : None * Return : None *******************************************************************************/ void delay(u32 z) { u32 x,y; for(x=z;x>0;x--) for(y=1100;y>0;y--); } int main(void) { #ifdef DEBUG debug(); #endif /* Configure the system clocks */ RCC_Configuration(); SysTick_Configuration(); /* NVIC Configuration */ NVIC_Configuration(); /* Configure the GPIO ports */ GPIO_Configuration(); /* Connect EXTI Line9 to PB.9 */ GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource3); /* Configure EXTI Line9 to generate an interrupt on falling edge */ EXTI_InitStructure.EXTI_Line = EXTI_Line3; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); for(;;) { GPIOC->ODR = 0xfffffc4f; Delay(80); GPIOC->ODR = 0xfffffc8f; Delay(80); GPIOC->ODR = 0xfffffd0f; Delay(80); GPIOC->ODR = 0xfffffe0f; Delay(80); GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)0X01); //向GPIOA0写入1 Delay(100); GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)0X00); //向GPIOA0写入0 Delay(100); GPIO_WriteBit(GPIOA,GPIO_Pin_1,(BitAction)0X01); //向GPIOA1写入1 Delay(100); GPIO_WriteBit(GPIOA,GPIO_Pin_1,(BitAction)0X00); //向GPIOA1写入0 Delay(100); } } /******************************************************************************* * Function Name : SysTick_Configuration * Description : Configures the SysTick to generate an interrupt each 1 millisecond. * Input : None * Output : None * Return : None *******************************************************************************/ void SysTick_Configuration(void) { /* Select AHB clock(HCLK) as SysTick clock source */ SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); /* Set SysTick Priority to 3 */ NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, 3, 0); /* SysTick interrupt each 1ms with HCLK equal to 72MHz */ SysTick_SetReload(72000); /* Enable the SysTick Interrupt */ SysTick_ITConfig(ENABLE); } /******************************************************************************* * Function Name : RCC_Configuration * Description : Configures the different system clocks. * Input : None * Output : None * Return : None *******************************************************************************/ void RCC_Configuration(void) { /* RCC system reset(for debug purpose) */ RCC_DeInit(); /* Enable HSE */ RCC_HSEConfig(RCC_HSE_ON); /* Wait till HSE is ready */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus == SUCCESS) { /* HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK2 = HCLK */ RCC_PCLK2Config(RCC_HCLK_Div1); /* PCLK1 = HCLK/2 */ RCC_PCLK1Config(RCC_HCLK_Div2); /* Flash 2 wait state */ FLASH_SetLatency(FLASH_Latency_2); /* Enable Prefetch Buffer */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* PLLCLK = 8MHz * 9 = 72 MHz */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* Enable PLL */ RCC_PLLCmd(ENABLE); /* Wait till PLL is ready */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { } /* Select PLL as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* Wait till PLL is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x08) { } } /* Enable GPIOB, GPIOC and AFIO clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO| RCC_APB2Periph_GPIOA, ENABLE); } /******************************************************************************* * Function Name : NVIC_Configuration * Description : Configures Vector Table base location. * Input : None * Output : None * Return : None *******************************************************************************/ void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; #ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); #else /* VECT_TAB_FLASH */ /* Set the Vector Table base location at 0x08000000 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); #endif /* Configure one bit for preemption priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); /* Enable the EXTI3 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /******************************************************************************* * Function Name : GPIO_Configuration * Description : Configures the different GPIO ports. * Input : None * Output : None * Return : None *******************************************************************************/ void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Configure PA. as Output push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure PC. as Output push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); /* Configure PA3 as input floating (EXTI Line9) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); } /******************************************************************************* * Function Name : Delay * Description : Inserts a delay time. * Input : nTime: specifies the delay time length, in milliseconds. * Output : None * Return : None *******************************************************************************/ void Delay(u32 nTime) { /* Enable the SysTick Counter */ SysTick_CounterCmd(SysTick_Counter_Enable); TimingDelay = nTime; while(TimingDelay != 0); /* Disable the SysTick Counter */ SysTick_CounterCmd(SysTick_Counter_Disable); /* Clear the SysTick Counter */ SysTick_CounterCmd(SysTick_Counter_Clear); } /******************************************************************************* * Function Name : Delay * Description : Inserts a delay time. * Input : nCount: specifies the delay time length. * Output : None * Return : None *******************************************************************************/ /* void Delay(vu32 nCount) { for(; nCount != 0; nCount--); } */ #ifdef DEBUG /******************************************************************************* * Function Name : assert_failed * Description : Reports the name of the source file and the source line number * where the assert error has occurred. * Input : - file: pointer to the source file name * - line: assert error line source number * Output : None * Return : None *******************************************************************************/ void assert_failed(u8* file, u32 line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infinite loop */ while (1) { } } #endif /******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/ |
/******************** (C) COPYRIGHT 2007 STMicroelectronics ******************** * File Name : stm32f10x_it.c * Author : MCD Application Team * Date First Issued : 02/05/2007 * Description : Main Interrupt Service Routines. * This file can be used to describe all the exceptions * subroutines that may occur within user application. * When an interrupt happens, the software will branch * automatically to the corresponding routine. * The following routines are all empty, user can write code * for exceptions handlers and peripherals IRQ interrupts. ******************************************************************************** * History: * 05/21/2007: V0.3 * 04/02/2007: V0.2 * 02/05/2007: V0.1 ******************************************************************************** * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. *******************************************************************************/ /* Includes ------------------------------------------------------------------*/ #include "stm32f10x_it.h" vu32 TimingDelay = 0; extern void Delay(vu32 nTime); /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ /******************************************************************************* * Function Name : NMIException * Description : This function handles NMI exception. * Input : None * Output : None * Return : None *******************************************************************************/ void NMIException(void) { } /******************************************************************************* * Function Name : HardFaultException * Description : This function handles Hard Fault exception. * Input : None * Output : None * Return : None *******************************************************************************/ void HardFaultException(void) { } /******************************************************************************* * Function Name : MemManageException * Description : This function handles Memory Manage exception. * Input : None * Output : None * Return : None *******************************************************************************/ void MemManageException(void) { } /******************************************************************************* * Function Name : BusFaultException * Description : This function handles Bus Fault exception. * Input : None * Output : None * Return : None *******************************************************************************/ void BusFaultException(void) { } /******************************************************************************* * Function Name : UsageFaultException * Description : This function handles Usage Fault exception. * Input : None * Output : None * Return : None *******************************************************************************/ void UsageFaultException(void) { } /******************************************************************************* * Function Name : DebugMonitor * Description : This function handles Debug Monitor exception. * Input : None * Output : None * Return : None *******************************************************************************/ void DebugMonitor(void) { } /******************************************************************************* * Function Name : SVCHandler * Description : This function handles SVCall exception. * Input : None * Output : None * Return : None *******************************************************************************/ void SVCHandler(void) { } /******************************************************************************* * Function Name : PendSVC * Description : This function handles PendSVC exception. * Input : None * Output : None * Return : None *******************************************************************************/ void PendSVC(void) { } /******************************************************************************* * Function Name : SysTickHandler * Description : This function handles SysTick Handler. * Input : None * Output : None * Return : None *******************************************************************************/ void SysTickHandler(void) { TimingDelay--; } /******************************************************************************* * Function Name : WWDG_IRQHandler * Description : This function handles WWDG interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void WWDG_IRQHandler(void) { } /******************************************************************************* * Function Name : PVD_IRQHandler * Description : This function handles PVD interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void PVD_IRQHandler(void) { } /******************************************************************************* * Function Name : TAMPER_IRQHandler * Description : This function handles Tamper interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void TAMPER_IRQHandler(void) { } /******************************************************************************* * Function Name : RTC_IRQHandler * Description : This function handles RTC global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void RTC_IRQHandler(void) { } /******************************************************************************* * Function Name : FLASH_IRQHandler * Description : This function handles Flash interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void FLASH_IRQHandler(void) { } /******************************************************************************* * Function Name : RCC_IRQHandler * Description : This function handles RCC interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void RCC_IRQHandler(void) { } /******************************************************************************* * Function Name : EXTI0_IRQHandler * Description : This function handles External interrupt Line 0 request. * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI0_IRQHandler(void) { } /******************************************************************************* * Function Name : EXTI1_IRQHandler * Description : This function handles External interrupt Line 1 request. * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI1_IRQHandler(void) { } /******************************************************************************* * Function Name : EXTI2_IRQHandler * Description : This function handles External interrupt Line 2 request. * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI2_IRQHandler(void) { } /******************************************************************************* * Function Name : EXTI3_IRQHandler * Description : This function handles External interrupt Line 3 request. * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI3_IRQHandler(void) { int i; if(EXTI_GetITStatus(EXTI_Line3) != RESET) { for(i=0;i<=8000000;i++) GPIOC->ODR = 0xfffffC3f; for(i=0;i<=2000000;i++) GPIOC->ODR = 0xffffffff; for(i=0;i<=1000000;i++) /* Clear the EXTI line 9 pending bit */ EXTI_ClearITPendingBit(EXTI_Line3); } } /******************************************************************************* * Function Name : EXTI4_IRQHandler * Description : This function handles External interrupt Line 4 request. * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI4_IRQHandler(void) { } /******************************************************************************* * Function Name : DMAChannel1_IRQHandler * Description : This function handles DMA Stream 1 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void DMAChannel1_IRQHandler(void) { } /******************************************************************************* * Function Name : DMAChannel2_IRQHandler * Description : This function handles DMA Stream 2 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void DMAChannel2_IRQHandler(void) { } /******************************************************************************* * Function Name : DMAChannel3_IRQHandler * Description : This function handles DMA Stream 3 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void DMAChannel3_IRQHandler(void) { } /******************************************************************************* * Function Name : DMAChannel4_IRQHandler * Description : This function handles DMA Stream 4 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void DMAChannel4_IRQHandler(void) { } /******************************************************************************* * Function Name : DMAChannel5_IRQHandler * Description : This function handles DMA Stream 5 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void DMAChannel5_IRQHandler(void) { } /******************************************************************************* * Function Name : DMAChannel6_IRQHandler * Description : This function handles DMA Stream 6 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void DMAChannel6_IRQHandler(void) { } /******************************************************************************* * Function Name : DMAChannel7_IRQHandler * Description : This function handles DMA Stream 7 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void DMAChannel7_IRQHandler(void) { } /******************************************************************************* * Function Name : ADC_IRQHandler * Description : This function handles ADC global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void ADC_IRQHandler(void) { } /******************************************************************************* * Function Name : USB_HP_CAN_TX_IRQHandler * Description : This function handles USB High Priority or CAN TX interrupts * requests. * Input : None * Output : None * Return : None *******************************************************************************/ void USB_HP_CAN_TX_IRQHandler(void) { } /******************************************************************************* * Function Name : USB_LP_CAN_RX0_IRQHandler * Description : This function handles USB Low Priority or CAN RX0 interrupts * requests. * Input : None * Output : None * Return : None *******************************************************************************/ void USB_LP_CAN_RX0_IRQHandler(void) { } /******************************************************************************* * Function Name : CAN_RX1_IRQHandler * Description : This function handles CAN RX1 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void CAN_RX1_IRQHandler(void) { } /******************************************************************************* * Function Name : CAN_SCE_IRQHandler * Description : This function handles CAN SCE interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void CAN_SCE_IRQHandler(void) { } /******************************************************************************* * Function Name : EXTI9_5_IRQHandler * Description : This function handles External lines 9 to 5 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI9_5_IRQHandler(void) { } /******************************************************************************* * Function Name : TIM1_BRK_IRQHandler * Description : This function handles TIM1 Break interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void TIM1_BRK_IRQHandler(void) { } /******************************************************************************* * Function Name : TIM1_UP_IRQHandler * Description : This function handles TIM1 overflow and update interrupt * request. * Input : None * Output : None * Return : None *******************************************************************************/ void TIM1_UP_IRQHandler(void) { } /******************************************************************************* * Function Name : TIM1_TRG_COM_IRQHandler * Description : This function handles TIM1 Trigger and Commutation interrupts * requests. * Input : None * Output : None * Return : None *******************************************************************************/ void TIM1_TRG_COM_IRQHandler(void) { } /******************************************************************************* * Function Name : TIM1_CC_IRQHandler * Description : This function handles TIM1 capture compare interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void TIM1_CC_IRQHandler(void) { } /******************************************************************************* * Function Name : TIM2_IRQHandler * Description : This function handles TIM2 global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void TIM2_IRQHandler(void) { } /******************************************************************************* * Function Name : TIM3_IRQHandler * Description : This function handles TIM3 global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void TIM3_IRQHandler(void) { } /******************************************************************************* * Function Name : TIM4_IRQHandler * Description : This function handles TIM4 global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void TIM4_IRQHandler(void) { } /******************************************************************************* * Function Name : I2C1_EV_IRQHandler * Description : This function handles I2C1 Event interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void I2C1_EV_IRQHandler(void) { } /******************************************************************************* * Function Name : I2C1_ER_IRQHandler * Description : This function handles I2C1 Error interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void I2C1_ER_IRQHandler(void) { } /******************************************************************************* * Function Name : I2C2_EV_IRQHandler * Description : This function handles I2C2 Event interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void I2C2_EV_IRQHandler(void) { } /******************************************************************************* * Function Name : I2C2_ER_IRQHandler * Description : This function handles I2C2 Error interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void I2C2_ER_IRQHandler(void) { } /******************************************************************************* * Function Name : SPI1_IRQHandler * Description : This function handles SPI1 global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void SPI1_IRQHandler(void) { } /******************************************************************************* * Function Name : SPI2_IRQHandler * Description : This function handles SPI2 global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void SPI2_IRQHandler(void) { } /******************************************************************************* * Function Name : USART1_IRQHandler * Description : This function handles USART1 global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void USART1_IRQHandler(void) { } /******************************************************************************* * Function Name : USART2_IRQHandler * Description : This function handles USART2 global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void USART2_IRQHandler(void) { } /******************************************************************************* * Function Name : USART3_IRQHandler * Description : This function handles USART3 global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void USART3_IRQHandler(void) { } /******************************************************************************* * Function Name : EXTI15_10_IRQHandler * Description : This function handles External lines 15 to 10 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI15_10_IRQHandler(void) { } /******************************************************************************* * Function Name : RTCAlarm_IRQHandler * Description : This function handles RTC Alarm interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void RTCAlarm_IRQHandler(void) { } /******************************************************************************* * Function Name : USBWakeUp_IRQHandler * Description : This function handles USB WakeUp interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void USBWakeUp_IRQHandler(void) { } /******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/ |
1.初始化 /* Connect EXTI Line3 to PA.3 */ GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource3); /* Configure EXTI Line3 to generate an interrupt on falling edge */ EXTI_InitStructure.EXTI_Line = EXTI_Line3; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); 2.NVIC void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; #ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); #else /* VECT_TAB_FLASH */ /* Set the Vector Table base location at 0x08000000 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); #endif /* Configure one bit for preemption priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); /* Enable the EXTI3 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } 3.GPIO void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Configure PA. as Output push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure PC. as Output push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); /* Configure PA3 as input floating (EXTI Line3) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); } 4.中断服务子函数 void EXTI3_IRQHandler(void) { int i; if(EXTI_GetITStatus(EXTI_Line3) != RESET) { for(i=0;i<=8000000;i++) GPIOC->ODR = 0xfffffC3f; for(i=0;i<=2000000;i++) GPIOC->ODR = 0xffffffff; for(i=0;i<=1000000;i++) /* Clear the EXTI line 3 pending bit */ EXTI_ClearITPendingBit(EXTI_Line3); } } |
/******************************************************************************* * File Name : main.c * Author : Wuhan R&D Center, Embest * Date First Issued : 08/08/2008 * Description : Main program body ********************************************************************************/ /* Includes ------------------------------------------------------------------*/ #include "stm32f10x_lib.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ ErrorStatus HSEStartUpStatus; /* Private function prototypes -----------------------------------------------*/ void RCC_Configuration(void); void NVIC_Configuration(void); void GPIO_Configuration(void); void EXTI_Configuration(void); void SysTick_Configuration(void); /* Private functions ---------------------------------------------------------*/ /******************************************************************************* * Function Name : main * Description : Main program. * Input : None * Output : None * Return : None *******************************************************************************/ int main(void) { #ifdef DEBUG debug(); #endif /* System Clocks Configuration ---------------------------------------------*/ RCC_Configuration(); /* GPIO configuration ------------------------------------------------------*/ GPIO_Configuration(); /* Check if the system has resumed from IWDG reset -------------------------*/ if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET) { /* IWDGRST flag set */ /* Turn on led connected to PA.0 */ GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET); /* Clear reset flags */ RCC_ClearFlag(); } else { /* IWDGRST flag is not set */ /* Turn off led connected to PA.0 */ GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET); } /* Configure EXTI Line9 to generate an interrupt on falling edge -----------*/ EXTI_Configuration(); /* NVIC configuration ------------------------------------------------------*/ NVIC_Configuration(); /* Configure SysTick to generate an interrupt each 250ms -------------------*/ SysTick_Configuration(); /* IWDG timeout equal to 350ms (the timeout may varies due to LSI frequency dispersion) -------------------------------------------------------------*/ /* Enable write access to IWDG_PR and IWDG_RLR registers */ IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); /* IWDG counter clock: 32KHz(LSI) / 32 = 1KHz */ IWDG_SetPrescaler(IWDG_Prescaler_32); /* Set counter reload value to 349 */ IWDG_SetReload(349); /* Reload IWDG counter */ IWDG_ReloadCounter(); /* Enable IWDG (the LSI oscillator will be enabled by hardware) */ IWDG_Enable(); while(1) { } } /******************************************************************************* * Function Name : RCC_Configuration * Description : Configures the different system clocks. * Input : None * Output : None * Return : None *******************************************************************************/ void RCC_Configuration(void) { /* RCC system reset(for debug purpose) */ RCC_DeInit(); /* Enable HSE */ RCC_HSEConfig(RCC_HSE_ON); /* Wait till HSE is ready */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus == SUCCESS) { /* HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK2 = HCLK */ RCC_PCLK2Config(RCC_HCLK_Div1); /* PCLK1 = HCLK */ RCC_PCLK1Config(RCC_HCLK_Div1); /* Flash 0 wait state */ FLASH_SetLatency(FLASH_Latency_0); /* Enable Prefetch Buffer */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* Select HSE as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE); /* Wait till HSE is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x04) { } } /* Enable GPIOA and AFIO clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); } /******************************************************************************* * Function Name : GPIO_Configuration * Description : Configures the different GPIO ports. * Input : None * Output : None * Return : None *******************************************************************************/ void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Configure PA.0 and PA.1 as Output push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure PB9 as input floating (EXTI Line9) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructure); } /******************************************************************************* * Function Name : EXTI_Configuration * Description : Configures EXTI Line9. * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI_Configuration(void) { EXTI_InitTypeDef EXTI_InitStructure; /* Connect EXTI Line9 to PA.3 */ GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9); /* Configure EXTI Line9 to generate an interrupt on falling edge */ EXTI_ClearITPendingBit(EXTI_Line9); EXTI_InitStructure.EXTI_Line = EXTI_Line9; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); } /******************************************************************************* * Function Name : NVIC_Configuration * Description : Configures NVIC and Vector Table base location. * Input : None * Output : None * Return : None *******************************************************************************/ void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; /* 2 bits for Preemption Priority and 2 bits for Sub Priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* Set SysTick interrupt vector Preemption Priority to 1 */ NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, 1, 0); } #ifdef DEBUG /******************************************************************************* * Function Name : assert_failed * Description : Reports the name of the source file and the source line number * where the assert error has occurred. * Input : - file: pointer to the source file name * - line: assert error line source number * Output : None * Return : None *******************************************************************************/ void assert_failed(u8* file, u32 line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infinite loop */ while (1) { } } #endif /******************************************************************************* * Function Name : SysTick_Configuration * Description : Configures SysTick to generate an interrupt each 250ms. * Input : None * Output : None * Return : None *******************************************************************************/ void SysTick_Configuration(void) { /* Select HCLK/8 as SysTick clock source */ SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); /* SysTick interrupt each 250ms with counter clock equal to 1MHz */ SysTick_SetReload(250000); /* Enable the SysTick Counter */ SysTick_CounterCmd(SysTick_Counter_Enable); /* Enable the SysTick Interrupt */ SysTick_ITConfig(ENABLE); } /******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/ |
/******************** (C) COPYRIGHT 2007 STMicroelectronics ******************** * File Name : stm32f10x_it.c * Author : MCD Application Team * Date First Issued : 02/05/2007 * Description : Main Interrupt Service Routines. * This file can be used to describe all the exceptions * subroutines that may occur within user application. * When an interrupt happens, the software will branch * automatically to the corresponding routine. * The following routines are all empty, user can write code * for exceptions handlers and peripherals IRQ interrupts. ******************************************************************************** * History: * 05/21/2007: V0.3 * 04/02/2007: V0.2 * 02/05/2007: V0.1 ******************************************************************************** * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. *******************************************************************************/ /* Includes ------------------------------------------------------------------*/ #include "stm32f10x_it.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ /******************************************************************************* * Function Name : NMIException * Description : This function handles NMI exception. * Input : None * Output : None * Return : None *******************************************************************************/ void NMIException(void) { } /******************************************************************************* * Function Name : HardFaultException * Description : This function handles Hard Fault exception. * Input : None * Output : None * Return : None *******************************************************************************/ void HardFaultException(void) { } /******************************************************************************* * Function Name : MemManageException * Description : This function handles Memory Manage exception. * Input : None * Output : None * Return : None *******************************************************************************/ void MemManageException(void) { } /******************************************************************************* * Function Name : BusFaultException * Description : This function handles Bus Fault exception. * Input : None * Output : None * Return : None *******************************************************************************/ void BusFaultException(void) { } /******************************************************************************* * Function Name : UsageFaultException * Description : This function handles Usage Fault exception. * Input : None * Output : None * Return : None *******************************************************************************/ void UsageFaultException(void) { } /******************************************************************************* * Function Name : DebugMonitor * Description : This function handles Debug Monitor exception. * Input : None * Output : None * Return : None *******************************************************************************/ void DebugMonitor(void) { } /******************************************************************************* * Function Name : SVCHandler * Description : This function handles SVCall exception. * Input : None * Output : None * Return : None *******************************************************************************/ void SVCHandler(void) { } /******************************************************************************* * Function Name : PendSVC * Description : This function handles PendSVC exception. * Input : None * Output : None * Return : None *******************************************************************************/ void PendSVC(void) { } /******************************************************************************* * Function Name : SysTickHandler * Description : This function handles SysTick Handler. * Input : None * Output : None * Return : None *******************************************************************************/ void SysTickHandler(void) { /* Reload IWDG counter */ IWDG_ReloadCounter(); /* Toggle led connected to PA.1 */ GPIO_WriteBit(GPIOA, GPIO_Pin_1, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1))); } /******************************************************************************* * Function Name : WWDG_IRQHandler * Description : This function handles WWDG interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void WWDG_IRQHandler(void) { } /******************************************************************************* * Function Name : PVD_IRQHandler * Description : This function handles PVD interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void PVD_IRQHandler(void) { } /******************************************************************************* * Function Name : TAMPER_IRQHandler * Description : This function handles Tamper interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void TAMPER_IRQHandler(void) { } /******************************************************************************* * Function Name : RTC_IRQHandler * Description : This function handles RTC global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void RTC_IRQHandler(void) { } /******************************************************************************* * Function Name : FLASH_IRQHandler * Description : This function handles Flash interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void FLASH_IRQHandler(void) { } /******************************************************************************* * Function Name : RCC_IRQHandler * Description : This function handles RCC interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void RCC_IRQHandler(void) { } /******************************************************************************* * Function Name : EXTI0_IRQHandler * Description : This function handles External interrupt Line 0 request. * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI0_IRQHandler(void) { } /******************************************************************************* * Function Name : EXTI1_IRQHandler * Description : This function handles External interrupt Line 1 request. * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI1_IRQHandler(void) { } /******************************************************************************* * Function Name : EXTI2_IRQHandler * Description : This function handles External interrupt Line 2 request. * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI2_IRQHandler(void) { } /******************************************************************************* * Function Name : EXTI3_IRQHandler * Description : This function handles External interrupt Line 3 request. * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI3_IRQHandler(void) { } /******************************************************************************* * Function Name : EXTI4_IRQHandler * Description : This function handles External interrupt Line 4 request. * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI4_IRQHandler(void) { } /******************************************************************************* * Function Name : DMAChannel1_IRQHandler * Description : This function handles DMA Stream 1 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void DMAChannel1_IRQHandler(void) { } /******************************************************************************* * Function Name : DMAChannel2_IRQHandler * Description : This function handles DMA Stream 2 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void DMAChannel2_IRQHandler(void) { } /******************************************************************************* * Function Name : DMAChannel3_IRQHandler * Description : This function handles DMA Stream 3 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void DMAChannel3_IRQHandler(void) { } /******************************************************************************* * Function Name : DMAChannel4_IRQHandler * Description : This function handles DMA Stream 4 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void DMAChannel4_IRQHandler(void) { } /******************************************************************************* * Function Name : DMAChannel5_IRQHandler * Description : This function handles DMA Stream 5 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void DMAChannel5_IRQHandler(void) { } /******************************************************************************* * Function Name : DMAChannel6_IRQHandler * Description : This function handles DMA Stream 6 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void DMAChannel6_IRQHandler(void) { } /******************************************************************************* * Function Name : DMAChannel7_IRQHandler * Description : This function handles DMA Stream 7 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void DMAChannel7_IRQHandler(void) { } /******************************************************************************* * Function Name : ADC_IRQHandler * Description : This function handles ADC global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void ADC_IRQHandler(void) { } /******************************************************************************* * Function Name : USB_HP_CAN_TX_IRQHandler * Description : This function handles USB High Priority or CAN TX interrupts * requests. * Input : None * Output : None * Return : None *******************************************************************************/ void USB_HP_CAN_TX_IRQHandler(void) { } /******************************************************************************* * Function Name : USB_LP_CAN_RX0_IRQHandler * Description : This function handles USB Low Priority or CAN RX0 interrupts * requests. * Input : None * Output : None * Return : None *******************************************************************************/ void USB_LP_CAN_RX0_IRQHandler(void) { } /******************************************************************************* * Function Name : CAN_RX1_IRQHandler * Description : This function handles CAN RX1 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void CAN_RX1_IRQHandler(void) { } /******************************************************************************* * Function Name : CAN_SCE_IRQHandler * Description : This function handles CAN SCE interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void CAN_SCE_IRQHandler(void) { } /******************************************************************************* * Function Name : EXTI9_5_IRQHandler * Description : This function handles External lines 9 to 5 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI9_5_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line9) != RESET) { /* Turn off led connected to PC.07 */ GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_RESET); /* As EXTI line9 pending bit is not cleared, the CPU will execute indefinitely this ISR and when the IWDG counter reaches 00h the IWDG reset occurs */ } } /******************************************************************************* * Function Name : TIM1_BRK_IRQHandler * Description : This function handles TIM1 Break interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void TIM1_BRK_IRQHandler(void) { } /******************************************************************************* * Function Name : TIM1_UP_IRQHandler * Description : This function handles TIM1 overflow and update interrupt * request. * Input : None * Output : None * Return : None *******************************************************************************/ void TIM1_UP_IRQHandler(void) { } /******************************************************************************* * Function Name : TIM1_TRG_COM_IRQHandler * Description : This function handles TIM1 Trigger and commutation interrupts * requests. * Input : None * Output : None * Return : None *******************************************************************************/ void TIM1_TRG_COM_IRQHandler(void) { } /******************************************************************************* * Function Name : TIM1_CC_IRQHandler * Description : This function handles TIM1 capture compare interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void TIM1_CC_IRQHandler(void) { } /******************************************************************************* * Function Name : TIM2_IRQHandler * Description : This function handles TIM2 global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void TIM2_IRQHandler(void) { } /******************************************************************************* * Function Name : TIM3_IRQHandler * Description : This function handles TIM3 global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void TIM3_IRQHandler(void) { } /******************************************************************************* * Function Name : TIM4_IRQHandler * Description : This function handles TIM4 global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void TIM4_IRQHandler(void) { } /******************************************************************************* * Function Name : I2C1_EV_IRQHandler * Description : This function handles I2C1 Event interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void I2C1_EV_IRQHandler(void) { } /******************************************************************************* * Function Name : I2C1_ER_IRQHandler * Description : This function handles I2C1 Error interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void I2C1_ER_IRQHandler(void) { } /******************************************************************************* * Function Name : I2C2_EV_IRQHandler * Description : This function handles I2C2 Event interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void I2C2_EV_IRQHandler(void) { } /******************************************************************************* * Function Name : I2C2_ER_IRQHandler * Description : This function handles I2C2 Error interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void I2C2_ER_IRQHandler(void) { } /******************************************************************************* * Function Name : SPI1_IRQHandler * Description : This function handles SPI1 global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void SPI1_IRQHandler(void) { } /******************************************************************************* * Function Name : SPI2_IRQHandler * Description : This function handles SPI2 global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void SPI2_IRQHandler(void) { } /******************************************************************************* * Function Name : USART1_IRQHandler * Description : This function handles USART1 global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void USART1_IRQHandler(void) { } /******************************************************************************* * Function Name : USART2_IRQHandler * Description : This function handles USART2 global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void USART2_IRQHandler(void) { } /******************************************************************************* * Function Name : USART3_IRQHandler * Description : This function handles USART3 global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void USART3_IRQHandler(void) { } /******************************************************************************* * Function Name : EXTI15_10_IRQHandler * Description : This function handles External lines 15 to 10 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI15_10_IRQHandler(void) { } /******************************************************************************* * Function Name : RTCAlarm_IRQHandler * Description : This function handles RTC Alarm interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void RTCAlarm_IRQHandler(void) { } /******************************************************************************* * Function Name : USBWakeUp_IRQHandler * Description : This function handles USB WakeUp interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void USBWakeUp_IRQHandler(void) { } /******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/ |
/******************************************************************************* * File Name : main.c * Author : Wuhan R&D Center, Embest * Date First Issued : 08/08/2008 * Description : Main program body ********************************************************************************/ /* Includes ------------------------------------------------------------------*/ #include "stm32f10x_lib.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ ErrorStatus HSEStartUpStatus; /* Private function prototypes -----------------------------------------------*/ void RCC_Configuration(void); void NVIC_Configuration(void); void GPIO_Configuration(void); void EXTI_Configuration(void); /* Private functions ---------------------------------------------------------*/ /******************************************************************************* * Function Name : main * Description : Main program. * Input : None * Output : None * Return : None *******************************************************************************/ int main(void) { #ifdef DEBUG debug(); #endif /* System Clocks Configuration ---------------------------------------------*/ RCC_Configuration(); /* GPIO configuration ------------------------------------------------------*/ GPIO_Configuration(); /* Check if the system has resumed from WWDG reset -------------------------*/ if(RCC_GetFlagStatus(RCC_FLAG_WWDGRST) != RESET) { /* WWDGRST flag set */ /* Turn on led connected to PC.06 */ GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET); /* Clear reset flags */ RCC_ClearFlag(); } else { /* WWDGRST flag is not set */ /* Turn off led connected to PC.06 */ GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET); } /* Configure EXTI Line9 to generate an interrupt on falling edge -----------*/ EXTI_Configuration(); /* NVIC configuration --------------------------------------------------------*/ NVIC_Configuration(); /* WWDG configuration --------------------------------------------------------*/ /* Enable WWDG clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); /* WWDG clock counter = (PCLK1/4096)/8 = 244 Hz (~4 ms) */ WWDG_SetPrescaler(WWDG_Prescaler_8); /* Set Window value to 0x41 */ WWDG_SetWindowValue(0x41); /* Enable WWDG and set counter value to 0x7F, WWDG timeout = ~4 ms * 64 = 262 ms */ WWDG_Enable(0x7F); /* Clear EWI flag */ WWDG_ClearFlag(); /* Enable EW interrupt */ WWDG_EnableIT(); while (1) { } } /******************************************************************************* * Function Name : RCC_Configuration * Description : Configures the different system clocks. * Input : None * Output : None * Return : None *******************************************************************************/ void RCC_Configuration(void) { /* RCC system reset(for debug purpose) */ RCC_DeInit(); /* Enable HSE */ RCC_HSEConfig(RCC_HSE_ON); /* Wait till HSE is ready */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus == SUCCESS) { /* HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK2 = HCLK */ RCC_PCLK2Config(RCC_HCLK_Div1); /* PCLK1 = HCLK */ RCC_PCLK1Config(RCC_HCLK_Div1); /* Flash 0 wait state */ FLASH_SetLatency(FLASH_Latency_0); /* Enable Prefetch Buffer */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* Select HSE as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE); /* Wait till HSE is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x04) { } } /* Enable GPIOC, GPIOB and AFIO clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); } /******************************************************************************* * Function Name : GPIO_Configuration * Description : Configures the different GPIO ports. * Input : None * Output : None * Return : None *******************************************************************************/ void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Configure PC.06 and PC.07 as Output push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure PB9 as input floating (EXTI Line9) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructure); } /******************************************************************************* * Function Name : EXTI_Configuration * Description : Configures EXTI Line9. * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI_Configuration(void) { EXTI_InitTypeDef EXTI_InitStructure; /* Connect EXTI Line9 to PB.9 */ GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9); /* Configure EXTI Line9 to generate an interrupt on falling edge */ EXTI_ClearITPendingBit(EXTI_Line9); EXTI_InitStructure.EXTI_Line = EXTI_Line9; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); } /******************************************************************************* * Function Name : NVIC_Configuration * Description : Configures NVIC and Vector Table base location. * Input : None * Output : None * Return : None *******************************************************************************/ void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; /* 2 bits for Preemption Priority and 2 bits for Sub Priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_Init(&NVIC_InitStructure); } #ifdef DEBUG /******************************************************************************* * Function Name : assert_failed * Description : Reports the name of the source file and the source line number * where the assert error has occurred. * Input : - file: pointer to the source file name * - line: assert error line source number * Output : None * Return : None *******************************************************************************/ void assert_failed(u8* file, u32 line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infinite loop */ while (1) { } } #endif /******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/ /******************************************************************************* * Function Name : WWDG_IRQHandler * Description : This function handles WWDG interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void WWDG_IRQHandler(void) { /* Update WWDG counter */ WWDG_SetCounter(0x7F); /* Clear EWI flag */ WWDG_ClearFlag(); /* Toggle led connected to PC.07 */ GPIO_WriteBit(GPIOA, GPIO_Pin_1, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1))); } void EXTI9_5_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line9) != RESET) { /* Turn off led connected to PC.07 */ GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_RESET); /* As EXTI line9 pending bit is not cleared, the CPU will execute indefinitely this ISR and when the WWDG counter falls to 3Fh the WWDG reset occurs */ } } |
LED的宏定义: #ifndef HAL_H #define HAL_H //硬件初始化 extern void ChipHalInit(void); extern void ChipOutHalInit(void); // extern u16 TestAdc(void); //输出宏定义 //清零 #define LED1_OFF GPIO_ResetBits(GPIOA, GPIO_Pin_8) //置一 #define LED1_ON GPIO_SetBits(GPIOA, GPIO_Pin_8) #define LED2_OFF GPIO_ResetBits(GPIOA, GPIO_Pin_7) #define LED2_ON GPIO_SetBits(GPIOA, GPIO_Pin_7) #define LED3_OFF GPIO_ResetBits(GPIOC, GPIO_Pin_7) #define LED3_ON GPIO_SetBits(GPIOC, GPIO_Pin_7) #define LED4_OFF GPIO_ResetBits(GPIOC, GPIO_Pin_5) #define LED4_ON GPIO_SetBits(GPIOC, GPIO_Pin_5) #define LED5_OFF GPIO_ResetBits(GPIOB, GPIO_Pin_9) #define LED5_ON GPIO_SetBits(GPIOB, GPIO_Pin_9) #define LED6_OFF GPIO_ResetBits(GPIOB, GPIO_Pin_8) #define LED6_ON GPIO_SetBits(GPIOB, GPIO_Pin_8) #define LED7_OFF GPIO_ResetBits(GPIOB, GPIO_Pin_5) #define LED7_ON GPIO_SetBits(GPIOB, GPIO_Pin_5) #define LED8_OFF GPIO_ResetBits(GPIOB, GPIO_Pin_0) #define LED8_ON GPIO_SetBits(GPIOB, GPIO_Pin_0) #endif AD转换驱动: /************************************************************** ADC PB1_ADC9 ***************************************************************/ #include "STM32Lib\\stm32f10x.h" void ADC_Configuration(void) { ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); /* PB1*/ //设置成模拟量输入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOB, &GPIO_InitStructure); /* ADC1 */ ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC1和ADC2工作独立模式 ADC_InitStructure.ADC_ScanConvMode = ENABLE; //连续多通道模式 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //连续转换,若设为DISALE则只转换一次 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换不受外界决定 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //右对齐 ADC_InitStructure.ADC_NbrOfChannel = 1; //扫描通道数 ADC_Init(ADC1, &ADC_InitStructure); /* ADC1 Regular Channel1 Configuration,PB1属于通道9 */ ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 1, ADC_SampleTime_55Cycles5); //通道X,采用时间为55.5周期,1代表规则通道第1个 ADC_Cmd (ADC1, ENABLE); /* Enable ADC1 */ ADC_SoftwareStartConvCmd(ADC1,ENABLE);/* Start ADC1 Software Conversion */ //使能转换开始 } u16 TestAdc(void) { u16 adc; if(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)==SET) { adc=ADC_GetConversionValue(ADC1); } return adc; } |
相关文章推荐
- stm32入门系列程序
- 微信程序开发系列教程(二)使用JavaScript给微信用户发送消息
- 10:ASP.NET复习系列- ASP.NET基本知识点- ASP.NET中的错误处理和程序优化
- [Java] 程序分析工具--java 优化系列
- Unix系列shell程序编写(上)
- eval(function(p,a,c,k,e,d)系列解密javascript程序
- Windows 7程序开发系列之一(任务栏篇)
- C++程序设计实践学材系列(4)——1.1 写出第一个C++程序
- 24c01~24c1024全系列EEPROM的读写程序
- 【EntityFramework系列教程六,翻译】在ASP.NET MVC程序中使用EntityFramework对相关数据进行更新
- 现代软件工程系列 结对编程 (II) 电梯调度程序
- 【spark系列2】spark中运行scala程序(build.sbt中的版本号问题)
- Red Gate系列之五 .NET Reflector 7.6.1.824 Edition .NET程序反编译神器(附插件安装教程2012-10-13更新) 完全破解+使用教程
- 点阵字体显示系列补记2:关于24点阵汉字显示程序及其修改版本
- 【WebGL初学系列之二】WebGL第一个程序,三角形
- 敏捷开发团队管理系列之四:程序与测试团队III
- 微信小程序之登录页实例 —— 微信小程序实战系列(5)
- [C# 网络编程系列]专题七:UDP编程补充——UDP广播程序的实现
- (转载)AS3领航系列教程 之 AS3程序的入口
- 直接使用Jlink仿真器下载程序至Freescale K60系列 MCU