当前位置:文档之家› stm32常用功能配置逻辑总结

stm32常用功能配置逻辑总结

STM32配置逻辑1、RCC配置缺省RCC寄存器—选择时钟源—设置高低速AHB时钟分频—设置ADC时钟—使能锁相环时钟—将锁相环设置为系统时钟—打开使用到的外部时钟Rcc子函数编写Void RCC_Configuation();{定义错误变量ErrorStatus HSEStartUpStatus;初始化RCC外部寄存器RCC_Deinit();打开外部高速晶振RCC_HSEConfig(RCC_HSE_ON)等待外部高速晶振准备好HSEStuartUpStatus=RCC_WaitForHSEStuartUp;判断是否起振if(HSEStuartUpStuartUpStatus==SUCCES){使能FLASH预读取缓冲区FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable)设置FLASH_Latency延时周期FLASH_SetLatency(FLASH_Latency_x)配置高速总线AHB时钟RCC_HCLKConfig(RCC_SYSCLK_DIVx);配置低总线APB2时钟RCC_PCLK2Config(RCC_HCLK_Divx);配置低总线APB1时钟RCC_PCLK1Config(RCC_HCLK_Divx);配置ADC外部时钟RCC_ADCCLKConfig(RCC_PCLK2_Divx);配置锁相环PLL时钟源及倍频RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9)使能锁相环时钟RCC_PLLCmd(ENABLE);等待PLL时钟稳定输出While(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);将锁相环设置为系统时钟RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);等待校验成功While(RCC_GetSYSCLKSource()!=0x08);}打开使用到的外部时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE);}2、GPIO的配置Rcc设置——gpio配置——led操作——while(1)主函数说明#include "stm32f10x_lib.h"主函数int main(void){时钟配置void RCC_Configuration(void);IO口初始化void GPIO_Configuration(void){定义结构GPIO_InitTypeDef GPIO_InitStructure;选择引脚GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x | GPIO_Pin_x;所选引脚频率GPIO_InitStructure.GPIO_Speed = GPIO_Speed_xMHz;所选引脚模式GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;初始化配置GPIO_Init(GPIOx , &GPIO_InitStructure);}while(1){置位引脚GPIO_SetBits(GPIOA , GPIO_Pin_2);GPIO_SetBits(GPIOA , GPIO_Pin_3);Delay(n);清零引脚GPIO_ResetBits(GPIOA , GPIO_Pin_2);GPIO_ResetBits(GPIOA , GPIO_Pin_3);Delay(n);}}3、EXTI配置规则配置时钟→初始化IO口→配置中端向量优先级→指定中断IO口→中断方式→使能中断→写中断函数主函数Void main (void){开启用到的外设时钟Void RCC_Configuation();初始化IO口Void IO_Configuation();中断设置Void EXTI_Configuation(){定义结构变量EXTI_InitTypeDef EXTI_InitStructure;清除中断标志EXTI_ClearPendingBit(EXTI_Linex);选择中断管脚GPIO_EXTILineConfig(GPIO_PortSourceGPIOx,GPIO_PinSourcex)选择中段线路EXTI_InitStructure.EXTI_Line(EXTI_Linex);中断模式EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;中断触发方式EXTI_InitStructure.EXTI_Trigger=EXTI_Teigger_Rising_Falling;中段线路使能EXTI_InitStructure.EXTI_LineCmd=ENABLE;初始化设置EXTI_Init(&EXTI_InitStucture);配置中断向量优先级Void NVIC_Configuation(){定义结构(只定义一次)NVIC_InitTypeDef NVIC_InitStructure;选择中断分组(选择一次)NVIC_PriorityGroupConfig(NVIC_Priority_group_x);选择中断通道NVIC_InitStructure.NVIC_IRQChannel=EXTIx_IRQChannel;抢占式中断优先级设置NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=x;响应式中断优先级设置NVIC_InitStructure.NVIC_IRQChannelSubPriority=x;使能中断NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;初始化设置NVIC_Init(&NVIC_InitStruction);}死循环While(1);}中断函数Void EXTIx_IRQHandler(voie){点亮LEDGPIO_SetBits(GPIOx,GPIO_Pin_x);清除中断标志EXTI_ClearITPendingBit(EXTI_Linex);}4、通用TIM配置规则开启时钟→设置中断向量→引脚初始化→设置TIM_Cfg→开启TIM→中断函数主函数Void main (){开启时钟RCC_Configuation()RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); }设置中断向量NVIC_Configuation(){NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}IO口初始化GPIO_Configuation(){GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB,&GPIO_InitStructure);}TIM设置TIMER_Configuation(){定义结构变量TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;缺省TIMER配置TIM_DeInit(TIMx);设置TIM时钟源TIM_InternalClockConfig(TIMx)设置预分频系数TIM_TimeBaseStructure.TIM_Prescaler=3600-1;设置时钟分割采样分频TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIVx;设置计数器计数模式TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;设置匹配次数TIM_TimeBaseStructure.TIM_Period=2000-1;初始化设置TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);清除溢出中断标志TIM_ClearFlag(TIM2,TIM_FLAG_Update);禁止ARR预装在缓冲器TIM_ARRPreloadConfig(TIM2,DISABLE)开启TIM2中断TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE)}TIM_Cmd(TIM2,ENABLE);While(1);}中断函数Void TIM2_IRQHandler(void){u8 ReadValue;if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){清除TIM2的中断待处理位TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);将PB.5管脚输出数值写入ReadValueReadV alue = GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5); if(ReadValue == 0)GPIO_SetBits(GPIOB,GPIO_Pin_5);elseGPIO_ResetBits(GPIOB,GPIO_Pin_5);}}。

相关主题