STM32 外设使用的基本配置顺序

引脚重映射配置过程(串口1为例):

 1.使能GPIO时钟(重映射后的IO);  使能功能外设时钟(例如串口1);  

2.使能AFIO时钟。重映射必须使能AFIO时钟:      RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);  

3.开启重映射。                                                        GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);  

根据第一个参数,来确定是部分重映射还是全部重映射

中断优先级设置步骤

1.系统运行后先设置中断优先级分组。 调用函数:                                                              void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);                                                   整个系统执行过程中,只设置一次中断分组。

2.针对每个中断,设置对应的抢占优先级和响应优先级:                                                       void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);

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

串口配置一般步骤

1.串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();

2.串口复位:USART_DeInit(); 这一步不是必须的

3.GPIO端口模式设置:GPIO_Init();

4.串口参数初始化:USART_Init();

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

6.使能串口:USART_Cmd();

7.编写中断处理函数:USARTx_IRQHandler();

8.串口数据收发: void USART_SendData();//发送数据到串口,DR uint16_t                                                              USART_ReceiveData();//接受数据,从DR读取接受到的数据

9.串口传输状态获取:                                                                                                      FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);

外部中断的一般配置步骤

1.初始化IO口为输入。                                                                                                      GPIO_Init();

2.开启IO口复用时钟。        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

3.设置IO口与中断线的映射关系。                                                                                               void GPIO_EXTILineConfig();

4.初始化线上中断,设置触发条件等。                                                                            EXTI_Init();

5.配置中断分组(NVIC),并使能中断。                                                                        NVIC_Init();

6.  编写中断服务函数。                                                                                   EXTIx_IRQHandler();

7.清除中断标志位                                                                                     EXTI_ClearITPendingBit();

独立看门狗操作步骤

 1.取消寄存器写保护:  IWDG_WriteAccessCmd();

2. 设置独立看门狗的预分频系数,确定时钟:    IWDG_SetPrescaler();

3. 设置看门狗重装载值,确定溢出时间:  IWDG_SetReload();

4. 使能看门狗 ;     IWDG_Enable();

5. 应用程序喂狗:  IWDG_ReloadCounter();

溢出时间计算:Tout=((4×2^prer) ×rlr) /40 (M3)

窗口看门狗配置过程

1.使能看门狗时钟: RCC_APB1PeriphClockCmd();

2. 设置分频系数:   WWDG_SetPrescaler();

3.设置上窗口值:  WWDG_SetWindowValue();

4.开启提前唤醒中断并分组(可选):  WWDG_EnableIT();        NVIC_Init();

5.使能看门狗:      WWDG_Enable();

6.喂狗:     WWDG_SetCounter();

7.编写中断服务函数    WWDG_IRQHandler();

定时器中断实现步骤

1. 能定时器时钟。        RCC_APB1PeriphClockCmd();

2. 初始化定时器,配置ARR,PSC。       TIM_TimeBaseInit();

3.开启定时器中断,配置NVIC。       void TIM_ITConfig();       NVIC_Init();

4. 使能定时器。       TIM_Cmd();

5. 编写中断服务函数。       TIMx_IRQHandler();

PWM输出配置步骤

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

        使能定时器时钟:RCC_APB1PeriphClockCmd();        

         使能GPIOB时钟:RCC_APB2PeriphClockCmd();

2.  初始化IO口为复用功能输出。函数:                                                                      GPIO_Init();                                                                                    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;      

3.这里我们是要把PB5用作定时器的PWM输出引脚,所以要重映射配置,        所以需要开启AFIO时钟。同时设置重映射。         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);         GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);

4.   初始化定时器:ARR,PSC等:TIM_TimeBaseInit();

5.   初始化输出比较参数:TIM_OC2Init();

6.  使能预装载寄存器: TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

7.  使能定时器。TIM_Cmd();

8.  不断改变比较值CCRx,达到不同的占空比效果:TIM_SetCompare2()

输入捕获的一般配置步骤

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

2.初始化IO口,模式为输入:                                                                                         GPIO_Init();                                                                                  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 输入

3.初始化定时器ARR,PSC    TIM_TimeBaseInit();

4.初始化输入捕获通道    TIM_ICInit();

5.如果要开启捕获中断,     TIM_ITConfig();     NVIC_Init();

6.使能定时器:TIM_Cmd();

7.编写中断服务函数:TIMx_IRQHandler();

ADC1的通道1(PA1)进行单次转化

1.开启PA口时钟和ADC1时钟,设置PA1为模拟输入。                                                   GPIO_Init();                                                                                                APB2PeriphClockCmd();

2.复位ADC1,同时设置ADC1分频因子。                        RCC_ADCCLKConfig(RCC_PCLK2_Div6);                                                         ADC_DeInit(ADC1);

3.初始化ADC1参数,设置ADC1的工作模式以及规则序列的相关信息。                                   void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);

4.使能ADC并校准。          ADC_Cmd(ADC1, ENABLE);

5.配置规则通道参数:      ADC_RegularChannelConfig();

6.开启软件转换:ADC_SoftwareStartConvCmd(ADC1);

7.等待转换完成,读取ADC值。    ADC_GetConversionValue(ADC1);

开启内部温度传感器步骤

1.选择ADC_IN16输入通道。

2. 设置采样时间大于17.1us  

3.设置ADC_CR2的TSVREFE位,打开内部温度传感器

4. 设置ADON位启动转换  

5.读取ADC结果  

6.计算。

DMA配置程序过程

1使能DMA时钟    RCC_AHBPeriphClockCmd();

2.初始化DMA通道参数    DMA_Init();

3.使能串口DMA发送,串口DMA使能函数:   USART_DMACmd();

4.使能DMA1通道,启动传输。    DMA_Cmd();

5.查询DMA传输状态   DMA_GetFlagStatus();

6.获取/设置通道当前剩余数据量:                                                    DMA_GetCurrDataCounter();                                                             DMA_SetCurrDataCounter();

SPI程序配置过程

1.配置相关引脚的复用功能,使能SPIx时钟                                                                            void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

2.初始化SPIx,设置SPIx工作模式                                                                                                void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct);

3.使能SPIx                                                                                                                              void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState);

4.SPI传输数据                                                                                                                            void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data);                                               uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx) ;

5.查看SPI传输状态                                                                               SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE);

  • 5
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值