在Stm32f103vet6实现PA0作为中断请求输入端,PA1作为推挽输出,输出速度50MHz, 接1个灯(高电平驱动) 主程序实现的功能: LED灯亮。中断服务程序实现的功能: LED灯闪5次。
时间: 2023-06-14 20:06:22 浏览: 100
SHT1X.C.zip_SHT1x_STM32f103vet6
5星 · 资源好评率100%
以下是实现PA0作为中断请求输入端,PA1作为推挽输出,输出速度50MHz,接1个灯(高电平驱动),并且主程序实现LED灯亮,中断服务程序实现LED灯闪5次的代码:
```c
#include "stm32f10x.h"
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void EXTI0_IRQHandler(void);
int main(void)
{
GPIO_Configuration();
NVIC_Configuration();
while (1)
{
GPIO_SetBits(GPIOA, GPIO_Pin_1); // LED灯亮
}
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// PA0配置为中断输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// PA1配置为推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
// 配置中断源为EXTI0
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
// 配置中断优先级为0
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void EXTI0_IRQHandler(void)
{
static int cnt = 0;
if (EXTI_GetITStatus(EXTI_Line0) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line0);
// LED灯闪5次
if (cnt < 5)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_1);
delay_ms(500);
GPIO_SetBits(GPIOA, GPIO_Pin_1);
delay_ms(500);
cnt++;
}
}
}
void delay_ms(int n)
{
int i, j;
for (i = 0; i < n; i++)
for (j = 0; j < 1000; j++);
}
```
代码中的delay_ms函数是用来产生延时的,可以根据实际需要修改。另外,需要注意的是,如果使用CubeMX生成代码的话,GPIO初始化的代码可能会有所不同,需要根据实际情况进行修改。
阅读全文