2024/8/25 学习stm32江科大相关内容

 

#include "stm32f10x.h"                  // Device header

void CountSensor(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	
	
	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);
	
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);
	
	EXTI_InitTypeDef EXTI_InitStructure ; 
	EXTI_InitStructure.EXTI_Line = EXTI_Line14;
	EXTI_InitStructure.EXTI_LineCmd = ENABLE ;
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt ; 
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling ;
	EXTI_Init(&EXTI_InitStructure);
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//在配置中断之前,先指定一下配置中断的分组
	//配置优先级分组,先占优先级(抢占)和从占(响应)优先级。
	//中断不多所以不太会导致中断冲突,所以分组比较随意,这里选择第二组,比较均衡
	//分组方式整个芯片只能用一种,所以这个分组的代码整个工程只需要执行以此就可以了。
	//如果放在模块里分组,那么需要保证每个分组选的组都是同一个。
	//也可以将此处的分组函数直接放到主函数里,这样模块不需要再次进行分组。
	
	
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn ;//指定中断通道开启或者关闭,
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE ;//EXTI10-15都是合并到了这个通道
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1 ; //抢占优先级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1 ; //相应优先级
	//不同的分组参数有不同的取值范围,并且取值在中断产生拥挤的时候起作用。
	//这里中断少,比较随意
	NVIC_Init(&NVIC_InitStructure);
}

主要是有关于中断函数的。函数初始化分为五部分,如PPT

这是江科大PPT资料。

首先需要打开外设的时钟,表现在函数里是由两行的第一部分,打开了属于APB2的GPIOB和AFIO的时钟。EXTI和NVIC的外设一直属于打开的状态。其中EXTI的外设一直开启原因未知。NVIC由于属于内核,所以不需要单独开启时钟。

第二步,初始化GPIO口,GPIO_Init()有两个参数,其中第一个是选择需要打开的口,这里是GPIOB,然后再取结构体名称的地址。

然后定义结构体变量,总共有三个。第一个是模式,此处为IPU上拉输入;第二个是Pin口,这里是14:第三个是速度,一般为50MHz;

第三步,配置中断引脚。这里的函数时GPIO_EXTILineConfig()虽然写着是GPIO的函数,但实际上是控制AFIO的。总共两个参数(两个source)一个是port(也就是输入端口为GPIOB)另一个是pin(固定为14号)

第四步,初始化EXTI。函数为EXTI_Init(),同样也是结构体参数。不过只有一个,因为输入已经固定。

结构体参数有四个。

  • 第一个选择为第14号线
  • 第二个状态控制选择打开
  • 第三个模式选择中断模式(另一个是事件中断)
  • 第四个意为触发方式(Trigger)选择下降沿触发

第五步。NVIC的初始化。

初始化之前需要进行分组。整个工程只需要运行一次。可以放在主函数,也可以放在模块中运行,但是需要保证分组的一致。如都是2组或者都是3组。

同样一个参数,需要结构体命名。

结构体总共有四个参数

  • 在这个工程中主要的就是第一个参数。指定开启关闭的通道。在这里信道10-15都在EXTI15_10_IRQn中。然
  • 第二个参数选择开启。
  • 第三个为抢占优先级
  • 第四个为相应优先级

这两个参数的范围随分组改变。在中断拥挤的时候起作用。此工程中断少,参数随意。所只需要保证在范围之内就可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值