stm32常用功能配置逻辑总结_关于stm32的配置总结

2020-02-27 其他工作总结 下载本文

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){ 点亮LED GPIO_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管脚输出数值写入ReadValue ReadValue = GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5);if(ReadValue == 0)GPIO_SetBits(GPIOB,GPIO_Pin_5);else GPIO_ResetBits(GPIOB,GPIO_Pin_5);} }

《stm32常用功能配置逻辑总结.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
stm32常用功能配置逻辑总结
点击下载文档
相关专题 关于stm32的配置总结 逻辑 常用 功能 关于stm32的配置总结 逻辑 常用 功能
[其他工作总结]相关推荐
    [其他工作总结]热门文章
      下载全文