stm32各模块函数写法模版基于V35固件库.docx

上传人:b****5 文档编号:2877090 上传时间:2022-11-16 格式:DOCX 页数:17 大小:22.61KB
下载 相关 举报
stm32各模块函数写法模版基于V35固件库.docx_第1页
第1页 / 共17页
stm32各模块函数写法模版基于V35固件库.docx_第2页
第2页 / 共17页
stm32各模块函数写法模版基于V35固件库.docx_第3页
第3页 / 共17页
stm32各模块函数写法模版基于V35固件库.docx_第4页
第4页 / 共17页
stm32各模块函数写法模版基于V35固件库.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

stm32各模块函数写法模版基于V35固件库.docx

《stm32各模块函数写法模版基于V35固件库.docx》由会员分享,可在线阅读,更多相关《stm32各模块函数写法模版基于V35固件库.docx(17页珍藏版)》请在冰豆网上搜索。

stm32各模块函数写法模版基于V35固件库.docx

stm32各模块函数写法模版基于V35固件库

STM32学习笔记

 

GPIO口

GPIO初始化

voidGPIO_Configuration(void)

{

GPIO_InitTypeDefGPIO_InitStructure;//声明结构体

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//打开功能时钟(再写这句程序的时候,必须进行时钟系统初始化的操作)。

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//指明操作对象引脚

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//设置IO口时钟为50MHz/10MHz/2MHz

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//设置推挽输出

/*GPIO_Mode_AIN模拟输入

GPIO_Mode_IN_FLOATING浮空输入(一般为中断所使用)。

GPIO_Mode_IPD下拉输入

GPIO_Mode_IPU上拉输入

GPIO_Mode_Out_OD开漏输出

GPIO_Mode_Out_PP推挽输出

GPIO_Mode_AF_OD复用开漏输出

GPIO_Mode_AF_PP复用推挽输出*/(一般用在点灯)。

GPIO_Init(GPIOA,&GPIO_InitStructure);//执行初始化IO口

}

GPIO常用函数

GPIO_SetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);//置高IO口

GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);//置低IO口

GPIO_WriteBit(GPIOA,GPIO_Pin_4,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_4)));//翻转IO口

GPIOA->ODR=0X0010;//IO口直接赋值语句

GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)(读取该口的电压值,相当于AVR的pin)。

若IO口为高电平,则这个函数返回为1,为低电平时返回为0.

SysTick系统时钟

SysTick配置函数

if(SysTick_Config(SystemCoreClock/3000))//配置时钟的频率,改变数字可改变频率,数字越大频率越快

{

/*Captureerror*/

while

(1);

}

 

EXTI中断

外部中断

外部中断IO口设置

voidGPIO_EXTI_Configuration(void)

{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,ENABLE);//使能时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能复用IO时钟

GPIO_InitTypeDefGPIO_InitStructure;//声明IO口初始化结构体

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;//指定PD.06为操作对象

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//设置模式为浮空输入

GPIO_Init(GPIOC,&GPIO_InitStructure);//初始化IO口

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14;//指定PD.13,14为操作对象

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//设置模式为浮空输入

GPIO_Init(GPIOD,&GPIO_InitStructure);//初始化IO口

GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource6);//将PC.06映射到外部中断

GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource13);//将PD.13映射到外部中断

GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource14);//将PD.14映射到外部中断

}

外部中断初始化

voidEXTI_Configuration(void)

{

EXTI_InitTypeDefEXTI_InitStructure;//声明外部中断初始化结构体

EXTI_InitStructure.EXTI_Line=EXTI_Line6|EXTI_Line13|EXTI_Line14;//使能外部中断线路6,13,14

EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//设置EXTI线路模式为中断

EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;//设置触发方式为上升沿

EXTI_InitStructure.EXTI_LineCmd=ENABLE;//使能中断线路

EXTI_Init(&EXTI_InitStructure);//初始化结构体

}

外部中断向量&优先级设定

voidNVIC_EXTI_Configuration(void)

{

NVIC_InitTypeDefNVIC_InitStructure;//声明中断向量&优先级设定结构体

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//选择中断向量组别为2组

NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQn;//指定外部中断向量

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//设置该中断的先占优先级

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//设置该中断的从优先级

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//使能该外部中断

NVIC_Init(&NVIC_InitStructure);//初始化外部中断

NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;//指定外部中断向量

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//设置该中断的先占优先级

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//设置该中断的从优先级

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//使能该外部中断

NVIC_Init(&NVIC_InitStructure);//初始化外部中断

}

由抢先优先级和从优先级实现了中断嵌套,进而使程序即使处理更加要紧的事情。

且高的抢先优先级可以打断低的抢先优先级,当抢先优先级相同时,那就比较从优先级,先响应高的。

当二者都相同时,先响应物理地址低的中断。

外部中断函数

/*example1*/

voidEXTI9_5_IRQHandler(void)

{

if(EXTI_GetITStatus(EXTI_Line6)!

=RESET)

//如果对应的中断线路触发事件,注意可以一个中断向量对应多个中断引脚

{

/*addcode*/

EXTI_ClearITPendingBit(EXTI_Line6);//清中断标志

}

}

/*example2*/

voidEXTI15_10_IRQHandler(void)

{

if(EXTI_GetITStatus(EXTI_Line13)!

=RESET)

//如果对应的中断线路13触发事件,注意可以一个中断向量对应多个中断引脚

{

/*addcode*/

EXTI_ClearITPendingBit(EXTI_Line13);//清中断标志位

}

if(EXTI_GetITStatus(EXTI_Line14)!

=RESET)

//如果对应的中断线路14触发事件,注意可以一个中断向量对应多个中断引脚

{

/*addcode*/

EXTI_ClearITPendingBit(EXTI_Line14);//清中断标志位

}

}

中断channel表

WWDG_IRQChannel窗口看门狗中断0x00

PVD_IRQChannelPVD通过EXTI探测中断

TAMPER_IRQChannel篡改中断

RTC_IRQChannelRTC全局中断

FlashItf_IRQChannelFLASH全局中断

RCC_IRQChannelRCC全局中断

EXTI0_IRQChannel外部中断线0中断

EXTI1_IRQChannel外部中断线1中断

EXTI2_IRQChannel外部中断线2中断

EXTI3_IRQChannel外部中断线3中断

EXTI4_IRQChannel外部中断线4中断

DMAChannel1_IRQChannelDMA通道1中断

DMAChannel2_IRQChannelDMA通道2中断

DMAChannel3_IRQChannelDMA通道3中断

DMAChannel4_IRQChannelDMA通道4中断

DMAChannel5_IRQChannelDMA通道5中断

DMAChannel6_IRQChannelDMA通道6中断

DMAChannel7_IRQChannelDMA通道7中断

ADC_IRQChannelADC全局中断

USB_HP_CANTX_IRQChannelUSB高优先级或者CAN发送中断

USB_LP_CAN_RX0_IRQChannelUSB低优先级或者CAN接收0中断

CAN_RX1_IRQChannelCAN接收1中断

CAN_SCE_IRQChannelCANSCE中断

EXTI9_5_IRQChannel外部中断线9-5中断(5至9对应一个中断源)。

TIM1_BRK_IRQChannelTIM1暂停中断

TIM1_UP_IRQChannelTIM1刷新中断

TIM1_TRG_COM_IR

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1