stm32_2

蜂鸣器:

蜂鸣器硬件连接为PF8,正常工作为高电平启动。

按键:

复位键为硬件连接为PA0k1/k2PE3/PE2

注:按键模式为输入模式。

按键检测函数:

u8 KEY_Scan(u8 mode)//mode  0:不支持连续按 1:支持连续按

    {

     static u8 key_up=1;

     if(mode==1) key_up=1;//支持连续按

      ifkey_up &&  KEY按下)

      {

        delay_ms(10);//延时,防抖

        key_up=0;//标记这次key已经按下

        if(KEY确实按下)

          {

           return KEY_VALUE;

          }

        }else if(KEY没有按下)  key_up=1;

       return 没有按下;

    }

 

时钟系统:

LSIRC(32kHz):低速内部时钟

LSEOSC(32.768kHz):低速外部时钟

HSE OSC(4-26MHz):高速外部时钟

HSI RC(16MHz):低速内部时钟

PLLCLK(最高168MHz):系统时钟

PLLP =  8MHz  *  N  /  (  M  *  P  )

STM32 5个时钟源:HSIHSELSILSEPLL

   ①、HSI是高速内部时钟,RC振荡器,频率为16MHz,精度不高。可以直接作为系统时钟或者用作PLL时钟输入。
②、HSE是高速外部时钟,频率范围为4MHz~26MHz
③、LSI是低速内部时钟,RC振荡器,频率为32kHz,提供低功耗时钟。主要供独立看门狗和自动唤醒单元使用。
④、LSE是低速外部时钟,接频率为32.768kHzRTC
⑤、PLL为锁相环倍频输出。STM32F4有两个PLL:

PLL(PLL)HSE或者HSI提供时钟信号,并具有两个不同的输出时钟。第一个输出PLLP用于生成高速的系统时钟(最高168MHz)。第二个输出PLLQ用于生成USB OTG FS的时(48MHz),随机数发生器的时钟和SDIO时钟。2.系统时钟SYSCLK可来源于三个时钟源:
        ①、HSI振荡器时钟

        ②、HSE振荡器时钟

        ③、PLL时钟

STM32F4时钟信号输出MCO1PA8)和MCO2(PC9)(MCO最大输出时钟不超过100MHz)

  RCC_APBxPeriphClockCmd();//外设时钟使能

  RCC_HSEConfig();//时钟源使能

RCC_APB1PeriphResetCmd();//外设复位;

RCC_GetFlagStatus();//状态参数获取

 

Systick定时器:

Systick定时器常用来做延时,一个24 位的倒计数定时器,计到时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。

SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常。

SysTick 控制和状态寄存器- CTRL: 配置函数:SysTick_CLKSourceConfig();

固件库中的Systick相关函数:

SysTick_CLKSourceConfig()//Systick时钟源选择  misc.c文件中

SysTick_Config(uint32_t ticks)

//初始化systick,时钟为HCLK,并开启中断core_cm4.h文件中

中断服务函数:

void SysTick_Handler(void);

 

端口复用:

AFRL寄存器,32位,四位二进制数选择一位AF0~AF15;

注:在使用端口复用时,注意模式设置为复用模式:

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用模式

NVIC中断优先级分组:

分组配置是在寄存器SCB->AIRCR中配置:

 

组 AIRCR[108]IP bit[74]分配情况  分配结果

0 111              04              0位抢占优先级,  4位响应优先级

1  110            13              1位抢占优先级,3位响应优先级

2 101                22              2位抢占优先级,2位响应优先级

3 100                31              3位抢占优先级,1位响应优先级

4 011                40              4位抢占优先级,0位响应优先级

抢占优先级 & 响应优先级区别:

 

1、高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。

2、抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。

3、抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。

4、如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;

 

中断优先级分组函数:

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);

 

注:数值越小优先级越高。一般情况下,系统代码执行过程中,只设置一次中断优先级分组。

 

中断优先级设置步骤:

 

1、系统运行后先设置中断优先级分组。调用函数:

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)整个系统执行过程中,只设置一次中断分组。

2、针对每个中断,设置对应的抢占优先级和响应优先级:

void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值