STM32F4库函数笔记.docx
- 文档编号:7538605
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:10
- 大小:19.46KB
STM32F4库函数笔记.docx
《STM32F4库函数笔记.docx》由会员分享,可在线阅读,更多相关《STM32F4库函数笔记.docx(10页珍藏版)》请在冰豆网上搜索。
STM32F4库函数笔记
莇
(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);配置时钟
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32F4 库函数 笔记