STMF库函数笔记.docx

上传人:b****4 文档编号:4210308 上传时间:2022-11-28 格式:DOCX 页数:10 大小:17.93KB
下载 相关 举报
STMF库函数笔记.docx_第1页
第1页 / 共10页
STMF库函数笔记.docx_第2页
第2页 / 共10页
STMF库函数笔记.docx_第3页
第3页 / 共10页
STMF库函数笔记.docx_第4页
第4页 / 共10页
STMF库函数笔记.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

STMF库函数笔记.docx

《STMF库函数笔记.docx》由会员分享,可在线阅读,更多相关《STMF库函数笔记.docx(10页珍藏版)》请在冰豆网上搜索。

STMF库函数笔记.docx

STMF库函数笔记

文件管理序列号:

[K8UY-K9IO69-O6M243-OL889-F88688]

 

STMF库函数笔记

(1)GPIO_Mode_AIN模拟输入

(2)GPIO_Mode_IN_FLOATING浮空输入

(3)GPIO_Mode_IPD下拉输入

(4)GPIO_Mode_IPU上拉输入

(5)GPIO_Mode_Out_OD开漏输出

(6)GPIO_Mode_Out_PP推挽输出

(7)GPIO_Mode_AF_OD复用开漏输出

(8)GPIO_Mode_AF_PP复用推挽输出

平时接触的最多的也就是推挽输出、开漏输出、上拉输入这三种

推挽输出:

可以输出高,低电平,连接数字器件;

开漏输出:

输出端相当于三极管的集电极.要得到高电平状态需要上拉电阻才行,一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平。

浮空输入:

由于浮空输入一般多用于外部按键输入,结合图上的输入部分电路,我理解为浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。

GPIO

GPIO_Init函数初始化

GPIO_InitTypeDefGPIO_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);//使能GPIOF时钟

//GPIOF9,F10初始化设置

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;//LED0和LED1对应IO口

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;//普通输出模式

GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽输出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//100MHz

GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//上拉

GPIO_Init(GPIOF,&GPIO_InitStructure);//初始化GPIOF9,F10

2个读取输入电平函数:

uint8_tGPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);

作用:

读取某个GPIO的输入电平。

实际操作的是GPIOx_IDR寄存器。

例如:

GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5);//读取GPIOA.5的输入电平

uint16_tGPIO_ReadInputData(GPIO_TypeDef*GPIOx);

作用:

读取某组GPIO的输入电平。

实际操作的是GPIOx_IDR寄存器。

例如:

GPIO_ReadInputData(GPIOA);//读取GPIOA组中所有io口输入电平

2个读取输出电平函数:

uint8_tGPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);

作用:

读取某个GPIO的输出电平。

实际操作的是GPIO_ODR寄存器。

例如:

GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_5);//读取GPIOA.5的输出电平

uint16_tGPIO_ReadOutputData(GPIO_TypeDef*GPIOx);

作用:

读取某组GPIO的输出电平。

实际操作的是GPIO_ODR寄存器。

例如:

GPIO_ReadOutputData(GPIOA);//读取GPIOA组中所有io口输出电平

4个设置输出电平函数:

voidGPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);

作用:

设置某个IO口输出为高电平

(1)。

实际操作BSRRL寄存器

voidGPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);

作用:

设置某个IO口输出为低电平(0)。

实际操作的BSRRH寄存器。

voidGPIO_WriteBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,BitActionBitVal);

voidGPIO_Write(GPIO_TypeDef*GPIOx,uint16_tPortVal);

后两个函数不常用,也是用来设置IO口输出电平。

端口复用为复用功能配置过程

-以PA9,PA10配置为串口1为例

1、GPIO端口时钟使能。

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);

2、复用外设时钟使能。

比如你要将端口PA9,PA10复用为串口,所以要使能串口时钟。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

3、端口模式配置为复用功能。

GPIO_Init()函数。

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//复用功能

中断优先级设置步骤

1、系统运行后先设置中断优先级分组。

调用函数:

voidNVIC_PriorityGroupConfig(uint32_tNVIC_PriorityGroup);

整个系统执行过程中,只设置一次中断分组。

2、针对每个中断,设置对应的抢占优先级和响应优先级:

voidNVIC_Init(NVIC_InitTypeDef*NVIC_InitStruct);

如果需要挂起/解挂,查看中断当前激活状态,分别调用相关函数即可。

独立看门狗操作步骤

1、取消寄存器写保护:

IWDG_WriteAccessCmd();

2、设置独立看门狗的预分频系数,确定时钟:

IWDG_SetPrescaler();

3、设置看门狗重装载值,确定溢出时间:

IWDG_SetReload();

4、使能看门狗

IWDG_Enable();

5、应用程序喂狗:

IWDG_ReloadCounter();

溢出时间计算:

Tout=((4×2^prer)×rlr)/32(M4)

在主函数,要设置中断优先级分组

NVIC_PriorityGroupConfig();

delay_init(168);配置时钟

窗口看门狗配置过程

voidWWDG_Init(u8tr,u8wr,u32fprer)

1、使能看门狗时钟:

RCC_APB1PeriphClockCmd();

2、设置分频系数:

WWDG_SetPrescaler();

3、设置上窗口值:

WWDG_SetWindowValue();

4、开启提前唤醒中断并分组(可选):

WWDG_EnableIT();

NVIC_Init();

WWDG_ClearFlag();//清除提前唤醒标志位

5、使能看门狗:

WWDG_Enable();;

7、编写中断服务函数

WWDG_IRQHandler();

1)喂狗:

WWDG_SetCounter();

2)清除标志位

WWDG_ClearFlag();

在主函数,要设置中断优先级分组

NVIC_PriorityGroupConfig();

delay_init(168);配置时钟

外部中断

STM32F4的每个IO都可以作为外部中断输入。

STM32F4的中断控制器支持22个外部中断/事件请求

EXTI线0~15:

对应外部IO口的输入中断。

EXTI线16:

连接到PVD输出。

EXTI线17:

连接到RTC闹钟事件。

EXTI线18:

连接到USBOTGFS唤醒事件。

EXTI线19:

连接到以太网唤醒事件。

EXTI线20:

连接到USBOTGHS(在FS中配置)唤醒事件。

EXTI线21:

连接到RTC入侵和时间戳事件。

EXTI线22:

连接到RTC唤醒事件。

外部中断的一般配置步骤:

1、使能SYSCFG时钟:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);

2、初始化IO口为输入。

GPIO_Init();

3、设置IO口与中断线的映射关系。

voidSYSCFG_EXTILineConfig();

4、初始化线上中断,设置触发条件等。

EXTI_Init();

5、配置中断分组(NVIC),并使能中断。

NVIC_Init();

6、编写中断服务函数。

EXTIx_IRQHandler();

1)清除中断标志位

EXTI_ClearITPendingBit();

在主函数,要设置中断优先级分组

NVIC_PriorityGroupConfig();

delay_init(168);配置时钟

串口配置的一般步骤

1、串口时钟使能:

RCC_APBxPeriphClockCmd();

GPIO时钟使能:

RCC_AHB1PeriphClockCmd();

2、引脚复用映射:

GPIO_PinAFConfig();

3、GPIO端口模式设置:

GPIO_Init();模式设置为GPIO_Mode_AF

4、串口参数初始化:

USART_Init();

5、开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)

NVIC_Init();

USART_ITConfig();

6、使能串口:

USART_Cmd();

7、编写中断处理函数:

USARTx_IRQHandler();

8、串口数据收发:

voidUSART_SendData();//发送数据到串口,DR

uint16_tUSART_ReceiveData();//接受数据,从DR读取接受到的数据

9、串口传输状态获取:

FlagStatusUSART_GetFlagStatus();

voidUSART_ClearITPendingBit();

串口中断服务函数不用清除中断

在主函数,要设置中断优先级分组

NVIC_PriorityGroupConfig();

定时器中断实现步骤

voidTimx_init(u8arr,psc);

1、能定时器时钟。

RCC_APB1PeriphClockCmd();

2、初始化定时器,配置ARR,PSC。

TIM_TimeBaseInit();

TIM_TIConfig();//使能更新中断

3、开启定时器中断,配置NVIC。

NVIC_Init();

4、使能定时器。

TIM_Cmd();

5、编写中断服务函数。

TIMx_IRQHandler();

1)判断中断模式

TIM_GetTIStatus(TIMx,中断模式);

2)清除标志

TIM_ClearITPendingBit();

在主函数,要设置中断优先级分组

NVIC_PriorityGroupConfig();

delay_init(168);配置时钟

PWM输出配置步骤:

voidTIM14_PWM_Init(u32arr,u32psc);

1、使能定时器14和相关IO口时钟。

使能定时器14时钟:

RCC_APB1PeriphClockCmd();

使能GPIOF时钟:

RCC_AHB1PeriphClockCmd();

2、初始化IO口为复用功能输出。

函数:

GPIO_Init();

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//复用功能

3、GPIOF9复用映射到定时器14

GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14);

4、初始化定时器:

ARR,PSC等:

TIM_TimeBaseInit();

5、初始化输出比较参数:

TIM_OC1Init();

6、使能预装载寄存器:

TIM_OC1PreloadConfig(TIM14,TIM_OCPreload_Enable);

7、使能自动重装载的预装载寄存器允许位TIM_ARRPreloadConfig(TIM14,ENABLE);

8、使能定时器TIM_Cmd(TIM14,ENABLE);//TIM14

9、不断改变比较值CCRx,达到不同的占空比效果:

TIM_SetCompare1();

在主函数,要设置中断优先级分组

NVIC_PriorityGroupConfig();

delay_init(168);配置时钟

输入捕获的一般配置步骤:

1、初始化定时器和通道对应IO的时钟。

2、初始化IO口,模式为复用:

GPIO_Init();

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;

3、设置引脚复用映射:

GPIO_PinAFConfig();

4、初始化定时器ARR,PSC

TIM_TimeBaseInit();

5、初始化输入捕获通道

TIM_ICInit();

6、如果要开启捕获中断,

TIM_ITConfig();

NVIC_Init();

7、使能定时器:

TIM_Cmd();

8、编写中断服务函数:

TIMx_IRQHandler();

RTC

RTC日历配置一般步骤

1、使能PWR时钟:

RCC_APB1PeriphClockCmd();

2、使能后备寄存器访问:

PWR_BackupAccessCmd();

RCC_LSEConfig(RCC_LSE_ON);//LSE开启

3、配置RTC时钟源,使能RTC时钟:

RCC_RTCCLKConfig();

RCC_RTCCLKCmd();

如果使用LSE,要打开LSE:

RCC_LSEConfig(RCC_LSE_ON);

4、初始化RTC(同步/异步分频系数和时钟格式):

RTC_Init();

5、设置时间:

RTC_SetTime();

6、置日期:

RTC_SetDate();

RTC闹钟配置一般步骤

1、RTC已经初始化好相关参数。

2、关闭闹钟:

RTC_AlarmCmd(RTC_Alarm_A,DISABLE);

3、配置闹钟参数:

RTC_SetAlarm();

4、开启闹钟:

RTC_AlarmCmd(RTC_Alarm_A,EABLE);

5、清除标志位

RTC_ClearITPendingBit(RTC_IT_ALRA);//清除闹钟(A)中断

EXTI_ClearITPendingBit(EXTI_Line17);//清除LINE17上的中断标志位

6、开启配置闹钟中断:

RTC_ITConfig();//开启闹钟(A)中断

RTC_AlarmCmd();//开启闹钟(A)

EXTI_Init();

NVIC_Init();

7、写中断服函数:

RTC_Alarm_IRQHandler();

RTC周期性自动唤醒配置一般步骤

1、RTC已经初始化好相关参数。

2、关闭WakeUp:

RTC_WakeUpCmd(DISABLE);

3、配置WakeUp时钟分频系数/来源:

RTC_WakeUpClockConfig();

4、设置WakeUp自动装载寄存器:

RTC_SetWakeUpCounter();

5、清除标志位

RTC_ClearITPendingBit(RTC_IT_WUT);//清除RTCWAKEUP的标志位

EXTI_ClearITPendingBit(EXTI_Line22);//清除LINE22上的中断标志位

6、使能WakeUp:

RTC_WakeUpCmd(ENABLE);

7、开启配置闹钟中断:

RTC_ITConfig();//开启WAKEUP定时器中断RTC_WakeUpCmd(ENABLE);//开启8、8、WAKEUP定时器

EXTI_Init();

NVIC_Init();

9、写中断服务函数:

RTC_WKUP_IRQHandler();

在主函数,要设置中断优先级分组

NVIC_PriorityGroupConfig();

delay_init(168);配置时钟

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

当前位置:首页 > 解决方案 > 学习计划

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

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