STM32期末考试答案详解 下载本文

内容发布更新时间 : 2024/12/22 20:42:34星期一 下面是文章的全部内容请认真阅读。

{ /* Go to infinite loop when Bus Fault exception occurs */ while (1) { } }

void UsageFault_Handler(void)

{ /* Go to infinite loop when Usage Fault exception occurs */ while (1) { } }

void SVC_Handler(void){}

void DebugMon_Handler(void){} void PendSV_Handler(void){} void SysTick_Handler(void)

{ // TimingDelay_Decrement(); }

void DMA1_Channel1_IRQHandler (void){} void RTC_WKUP_IRQHandler(void){} void TIM2_IRQHandler(void) {

uint16_t capture=0;/*当前捕获计数值局部变量*/

/*TIM时钟=32M,分频数=1599+1,TIM2 counter clock=10khz CC1更新率=TIM2counter clock/CCRX_Val*/

if(TIM_GetITStatus(TIM2,TIM_IT_CC1)!=RESET) {

GPIO_WriteBit(GPIOB,GPIO_Pin_6,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_6)));

/*读出当前计数值*/

capture=TIM_GetCapture1(TIM2);

/*根据当前计数值更新输出捕获寄存器*/ TIM_SetCompare1(TIM2,capture+CCR1_Val); TIM_ClearITPendingBit(TIM2,TIM_IT_CC1); }

else if(TIM_GetITStatus(TIM2,TIM_IT_CC2)!=RESET) {

GPIO_WriteBit(GPIOB,GPIO_Pin_7,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_7)));

capture=TIM_GetCapture2(TIM2);

TIM_SetCompare2(TIM2,capture+CCR2_Val); TIM_ClearITPendingBit(TIM2,TIM_IT_CC2); }

//else if(TIM_GetITStatus(TIM2,TIM_IT_CC3)!=RESET) // { //

GPIO_WriteBit(GPIOA,GPIO_Pin_6,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_6)));

// capture=TIM_GetCapture3(TIM2);

// TIM_SetCompare3(TIM2,capture+CCR3_Val); // TIM_ClearITPendingBit(TIM2,TIM_IT_CC3); //}

//else if(TIM_GetITStatus(TIM2,TIM_IT_CC4)!=RESET) //{

//GPIO_WriteBit(GPIOA,GPIO_Pin_7,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_7)));

// capture=TIM_GetCapture4(TIM2);

// TIM_SetCompare4(TIM2,capture+CCR4_Val); // TIM_ClearITPendingBit(TIM2,TIM_IT_CC4); //} }

* @}

按键按一下,LED3和LED4灯亮,松开按键,再次按下按键,LED3和LED4灯灭。 * 使用GPIO和SysTick定时器实现按键扫描**/ #include \ #include \

#include \

#include \ /* Private function prototypes */

void RCC_Configuration(void); /*系统时钟设置*/

void Init_GPIOs (void); /*GPIO端口设置*/ void Delay(uint32_t nTime);

static volatile uint32_t TimingDelay; /*定义静态变量*/ int main(void)

{ /* Configure Clocks for Application need */ RCC_Configuration();

SysTick_Config(16000000/ 2000); /*设置SysTick时钟*/ /* Init I/O ports */ Init_GPIOs(); while(1)

{ //GPIO_TOGGLE(LD_GPIO_PORT ,LD_GREEN_GPIO_PIN ); //Delay(1000);

if(GPIO_ReadInputDataBit(USERBUTTON_GPIO_PORT, USERBUTTON_GPIO_PIN)==0x01) { Delay(2000); /*延时1秒,即按1秒以上才翻转*/

if(GPIO_ReadInputDataBit(USERBUTTON_GPIO_PORT, USERBUTTON_GPIO_PIN)==0x01) { GPIO_TOGGLE(LD_GPIO_PORT ,LD_GREEN_GPIO_PIN ); /*翻转输出电平*/ GPIO_TOGGLE(LD_GPIO_PORT ,LD_BLUE_GPIO_PIN ); }

while(GPIO_ReadInputDataBit(USERBUTTON_GPIO_PORT, USERBUTTON_GPIO_PIN)==0x01); } } }

void RCC_Configuration(void) { RCC_DeInit();

RCC_HSICmd(ENABLE); /* 使能HSI时钟 */ /* 等待 HSI 稳定*/

while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET) {}

RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI); /*选择HIS为系统时钟源*/ RCC_MSIRangeConfig(RCC_MSIRange_6);

RCC_HSEConfig(RCC_HSE_OFF); /*关闭HSE时钟*/ if(RCC_GetFlagStatus(RCC_FLAG_HSERDY) != RESET ) /*等待关闭 稳定*/ {

while(1); }

/* Enable comparator clock LCD and PWR mngt */

//RCC_APB1PeriphClockCmd(RCC_APB1Periph_LCD | RCC_APB1Periph_PWR, ENABLE); 使能APB1外设时钟*/

/* Enable ADC clock & SYSCFG */

//RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_SYSCFG, ENABLE); /*使能APB2外设时钟*/ }

void Init_GPIOs (void)

{ GPIO_InitTypeDef GPIO_InitStructure; /* 使能AHB时钟*/

RCC_AHBPeriphClockCmd(LD_GPIO_PORT_CLK|USERBUTTON_GPIO_CLK, ENABLE); /* 选择输入管脚 */

GPIO_InitStructure.GPIO_Pin = USERBUTTON_GPIO_PIN;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //浮空输入 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz; GPIO_Init(USERBUTTON_GPIO_PORT, &GPIO_InitStructure); /* 选择输出管脚*/

GPIO_InitStructure.GPIO_Pin = LD_GREEN_GPIO_PIN | LD_BLUE_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(LD_GPIO_PORT, &GPIO_InitStructure); GPIO_LOW(LD_GPIO_PORT, LD_GREEN_GPIO_PIN); GPIO_LOW(LD_GPIO_PORT, LD_BLUE_GPIO_PIN); /* Enable all GPIOs clock */

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOD |

RCC_AHBPeriph_GPIOE | RCC_AHBPeriph_GPIOH, ENABLE); }

/*

void Delay(uint32_t nTime) { TimingDelay = nTime; while(TimingDelay != 0); }

void TimingDelay_Decrement(void) { if (TimingDelay != 0x00) { TimingDelay--; } }