Stm32f103学习记录---TIM和EXTI(代码部分)

该博客围绕STM32展开,介绍了EXTI配置,包括打通GPIO到NVIC的电路、各步骤的时钟开启、模式配置及中断函数编写;还讲解了TIM配置,涉及分频、定时频率计算和库函数使用;最后阐述了外部时钟源选择,包含硬件电路和程序编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、EXTI配置

打通这一路的电路即可

GPIO             ------》       AFIO        ------》    EXTI        -----》      NVIC

step1:打开RCC时钟

注意:RCC管的是外面的,NVIC住在皇宫里面,RCC管不着,可参照stm32f103c8t6芯片原

           理图

step2:配置GPIO,输入模式

step3:AFIO,选择这一路的GPIO

注意:相同的pin不能同时申请中断如PA1和PB1

step4:配置EXTI,选择边沿触发方式or触发响应方式

step5:配置NVIC,给中断配置抢占优先级和响应优先级

1.打开RCC时钟

rcc.h

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
//使用
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE)

 AFIO也在APB2上


RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE)

2.配置GPIO,输入模式

/*GPIO初始化*/
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);						//将PA1和PA2引脚初始化为推挽输出

GPIO_Mode_AIN 模拟输入

。。。IN_FLOATING 浮空输入

。。。IPD    下拉输入 

。。。IPU   上拉输入

。。。Out_OD   开漏输出

。。。Out_PP    推挽输出

。。。AF_OD     复用开漏输出

。。。AF_PP     复用推挽输出

推挽输出时:寄存器为1,输出1,为0,输出0

开漏输出时:寄存器为1,输出断开(高阻模式),为0,输出0

(作用:1.可作为通信协议输出,输出更高电平2.只需在IO口外接上拉电阻到5V )

库函数(gpio.h):

读取某引脚输入的电平(0为低,1为高)
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
读取整个输入寄存器的数据
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
读取某引脚输出的电平(0为低,1为高)
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
读取整个输出寄存器的数据
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
设为高电平
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
设为低电平
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
写某个引脚的数据
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
写数据
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

锁定引脚配置,放止意外修改
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
引脚重映射
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);
配置AFIO数据选择器,选择要配置中断的引脚
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
以太网相关
void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface);

 3.AFIO,选择这一路的GPIO

void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
选择GPIO pin作为外部中断线
GPIO_PortSource 要选择的GPIO pin
GPIO_PinSource 哪个引脚

以PB14为例:
GPIO_PortSourceGPIOB
GPIO_PinSource14
4.配置EXTI,选择边沿触发方式or触发响应方式 
/*EXTI初始化*/
EXTI_InitTypeDef EXTI_InitStructure;						//定义结构体变量
EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line1;		//选择配置外部中断的0号线和1号线
EXTI_InitStructure.EXTI_LineCmd = ENABLE;					//指定外部中断线使能
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;			//指定外部中断线为中断模式
            EXTI_Mode_Event事件模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;		//指定外部中断线为下降沿触发
            Trigger_Rising上升沿
            Trigger_Falling下降沿
            Trigger_
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值