STM32_0 : 各模块的通用初始化配置(持续更新)

0. 初始化的注意事项(随时补充)

  1. 所有的结构体声明必须要放在初始化函数的最前面
  2. 如果每个初始化有头文件的话,初始化函数要在头文件中事先定义
  3. 如果使用串口或GPIO口,记得使能时钟,又或是设置中断
  4. 使用串口记得波特率一定要对!!
  5. 要非常注意硬件对应的串口或GPIO口的连接关系

1. 头文件的编写

##ifndef__需要驱动的硬件_H
##define__需要驱动的硬件_H
#define 需要驱动的硬件 接口 //比如 #define BEEP PBout(8) // BEEP,蜂鸣器接口
初始化函数 //比如 void BEEP_Init(void); //声明初始化函数
宏定义 //比如#define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) //读取按键 0
#endif

2. GPIO的设置以及初始化

  1. GPIO_InitTypeDef GPIO_InitStructure; //创建名为 GPIO_InitStructure初始化结构体

  2. RCC_APB1PeriphClockCmd(各GPIO口对应的时钟|各GPIO口对应时钟,Enable); //使能时钟

  3. GPIO_InitStructure.GPIO_Pin=GPIO_PIN_引脚号; //配置需要使用的引脚

  4. GPIO_IniStructure.GPIO_Mode=GPIO_Mode_模式; //配置引脚模式

  5. GPIO_IniStructure.GPIO_SPEED=GPIO_Speed_速度Mhz; //配置引脚速度

  6. GPIO_Init(要初始化的GPIO口,&GPIO_InitStructure); //初始化引脚所在组

以下两步看具体的情况,比如说led需要先初始化为高电平,让led不亮要用Set函数,或者蜂鸣器低电平关闭,所以需要初始化为低电 平则要用Reset函数

  1. GPIO_ResetBits(GPIO口,GPIO_Pin_引脚号); //设置引脚初始化为0

  2. GPIO_SetBits(GPIO口,GPIO_Pin_引脚号); //设置引脚初始化为1

3. NVIC中断设置

  1. NVIC_InitTypeDef NVIC_InitStructure; //创建名为NVIC_InitStructure的初始化结构体
  2. NVIC_InitStructure.NVIC_IRQChannel=串口名_IRQn; //设置中断频道
  3. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=优先级; **//设置抢占优先级 **
  4. NVIC_InitStructure.NVIC_IRQChannelSubPriority =优先级; ** //设置子优先级**
  5. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; ** //IRQ 通道使能**
  6. NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化 VIC 寄存器

4. USART 初始化设置

  1. USART_InitTypeDef USART_InitStructure; //创建名为USART_InitStructure初始化结构体
  2. USART_InitStructure.USART_BaudRate=波特率; //设置串口波特率
  3. USART_InitStructure.USART_WordLength=USART_WordLength_位数以及进制; //设置字长
  4. USART_InitStructure.USART_WordLength=USART_StopBits_位数//停止位个数
  5. USART_InitStructure.USART_Parity = USART_Parity_Yes or No; //是否有奇偶校验位
  6. USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None; //无硬件数据流控制
  7. USART_InitStructure.USART_Mode = USART_Mode_收发模式; //收发模式
  8. USART_Init(USART串口号, &USART_InitStructure); //初始化串口
  9. USART_ITConfig(USART串口号, USART_IT_RXNE, Enable); //中断开启
  10. USART_Cmd(USART串口号, ENABLE); //使能串口

5. 时钟的初始化设置

  1. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //创建名为TIM_TimeBaseStructure的初始化结构体
  2. TIM_TimeBaseStructure.TIM_Period=arr; //设定计数器自动重装值
  3. TIM_TimeBaseStructure.TIM_Prescaler=psc; 设定预分频值
  4. TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV分频数; //TDTS=TCK_tim,有1,2,4
  5. TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_模式; //TIM向上或向下计数模式,Up或Down
  6. TIM_TimeBaseStructure.TIM_RepetitionCounter = 0或1; //重复计数设置
  7. TIM_TimeBaseInit(时钟,&TIM_TimeBaseStructure);**//根据指定的参数初始化TIMx **
  8. TIM_Cmd(TIM定时器号,ENABLE); //使能定时器

6. 输入捕获通道初始化

  1. TIM_ICInitStructure.TIM_Channel=TIM_Channel_频道数; //设定捕获通道
  2. TIM_ICInitStructure.TIM_ICFilter=0x00; //配置输入滤波器,可设置滤波器长度,0就是不滤波
  3. TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_有效沿边; //设定捕捉有效沿边,Rising,Falling,BothEdge
  4. TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV分频系数; //设定分频系数,有1,2,4
  5. TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI; //选择输入端IC映射到TI上
  6. TIM_ICInit(需要使用的TIM, &TIM_ICInitStructure); //完成最后的初始化
  7. TIM_ITConfig(TIM定时器号,TIM_IT_Update|TIM_IT_CC1,ENABLE); //允许更新中断捕获中断
  8. TIM_Cmd(TIM定时器号,ENABLE); //使能定时器,这句配合上面的时钟初始化后,写在最后,并且时钟初始化不需要写这句
  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bug_Maker 八嘎创造者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值