STM32个人笔记

1、较精确的软件延时函数:

void delay_us ( unsigned int us )
{
  unsigned char n;
  while( us-- )
         for( n=0;n<9; n++ );
}

void delay_ms ( unsigned int ms )
{
  while( ms-- )
        delay_us(1000);
}

 2、关于GPIO的8种模式:

GPIO_Mode_AIN                       //模拟输入
GPIO_Mode_IN_FLOATING               //浮空输入
GPIO_Mode_IPD                       //下拉输入
GPIO_Mode_IPU              //上拉输入
GPIO_Mode_Out_OD             //开漏输出
GPIO_Mode_Out_PP            //推挽输出
GPIO_Mode_AF_OD             //开漏复用输出
GPIO_Mode_AF_PP //推挽复用输出
 

 3、嘀嗒定时器:

delay.c内容:

#include "delay.h"


void delay_us ( unsigned int us)        //微秒级延时函数,嘀嗒定时器为24位向下计数器
{
    SysTick -> VAL = 0;        //设置计数器初值为0,一共32位,24位可用
    SysTick -> LOAD = 9*us;        //每计9个数才是1us,这里和TIM定时器计数有区别
    SysTick -> CTRL = 0x01;        //使能计数器,第0位为使能位,置1使能,置0失能
    while((SysTick ->CTRL) != 0x10001);        //向下产生溢出后,产生中断标志,及判断16位是否置1
    SysTick -> CTRL =0;        //产生溢出后,产生中断标志的第16位被置1,此时再将第16位置0,以便下次计数
    SysTick -> VAL =0;        //设置计数器初值为0,一共32位,24位可用
}

void delay_ms ( unsigned int ms)        //毫秒级延时函数,嘀嗒定时器为24位向下计数器
{
    SysTick -> VAL = 0;//设置计数器初值为0,一共32位,24位可用
    SysTick -> LOAD = 9000*ms;//这里计9000个数才是1ms,这里和TIM定时器计数有区别
    SysTick -> CTRL = 0x01;//使能计数器,第0位为使能位,置1使能,置0失能
    while((SysTick ->CTRL) != 0x10001);//向下产生溢出后,产生中断标志,及判断16位是否置1
    SysTick -> CTRL =0;//产生溢出后,产生中断标志的第16位被置1,此时再将第16位置0,以便下次计数
    SysTick -> VAL =0;//设置计数器初值为0,一共32位,24位可用
}

delay.h内容:

#ifndef __DELAY_H
#define __DELAY_H
#include "stm32f10x.h"


void delay_us(unsigned int us);
void delay_ms(unsigned int ms);
#endif

4、关于按键软件消抖的写法:

if(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin_x)==0){
  delay_ms(50);
    if(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin_x)==0){
//此处为按键按下所要实现的功能
   }
}

 5、关于GPIO_CRL &=~(0x0F<<(4*0))的解析:

“ ~(0x0F<<(4*0)) ” 的值为0xF0;

后写为:GPIO_CRL= GPIO_CRL & 0xF0;

假设GPIO_CRL的值为0100 1100

那么这条程序的作用:GPIO_CRL的值的低4位被置0,其他位不变。

6、关于灯闪程序的问题:

GPIO_SetBits(GPIOA, GPIO_Pin_8);
SysTick_Delay_Ms(500);        //系统精准的延时函数
GPIO_ResetBits(GPIOA, GPIO_Pin_8);
SysTick_Delay_Ms(500);

要想实现灯闪,必须在灯亮及灭后加延时函数,否则无法实现目的,即考虑视觉停留问题!

 7、关于按键硬件防抖的电路设计:

注:此处参照野火板子硬件防抖设计

8、关于基本定时器,通用定时器和高级定时器:

猜你喜欢

转载自www.cnblogs.com/linchenGG/p/9903502.html