赞
踩
目录
led.h
- #ifndef __LED_H__
- #define __LED_H__
- #include "stm32f4xx.h" // Device header
-
- void LED_init(void); //初始化
- void LED1_on(void); //打开LED1
- void LED1_off(void); //关闭LED1
- void LED2_on(void); //打开LED2
- void LED2_off(void); //关闭LED2
- void LED3_on(void); //关闭LED3
- void LED3_off(void); //关闭LED3
-
- #endif
led.c
- #include "led.h"
-
- /*********************************************
- *功能:初始化LED灯
- *参数:无
- *返回值:无
- *其他:
- *根据原理图
- * LED1 ---- PE8
- * LED1 ---- PE9
- * LED1 ---- PE10
- * 高电平灭,低电平亮
- ***********************************************/
- void LED_init(void)
- {
- /*********1.开启时钟******************************/
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
-
- /*********2.初始化GPIO相关引脚*********************/
- GPIO_InitTypeDef GPIO_InitStruct;
-
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; //模式:输出模式
- GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; //输出:推挽
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10; //引脚:8、9、10
- GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //上下拉:上拉
-
- GPIO_Init(GPIOE,&GPIO_InitStruct);
-
- /*********3.初始化引脚状态*********************/
- GPIO_SetBits(GPIOE,GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10); //引脚给高电平,默认灭灯
-
- }
-
- /*********************************************
- *功能:开LED1灯
- *参数:无
- *返回值:无
- *其他:
- *根据原理图
- * LED1 ---- PE8
- * LED1 ---- PE9
- * LED1 ---- PE10
- * 高电平灭,低电平亮
- ***********************************************/
- void LED1_on(void)
- {
- GPIO_ResetBits(GPIOE,GPIO_Pin_8); //引脚给低电平,亮灯
- }
- /*********************************************
- *功能:关LED1灯
- *参数:无
- *返回值:无
- *其他:
- *根据原理图
- * LED1 ---- PE8
- * LED1 ---- PE9
- * LED1 ---- PE10
- * 高电平灭,低电平亮
- ***********************************************/
- void LED1_off(void)
- {
- GPIO_SetBits(GPIOE,GPIO_Pin_8); //引脚给高电平,灭灯
- }
-
- /*********************************************
- *功能:开LED2灯
- *参数:无
- *返回值:无
- *其他:
- *根据原理图
- * LED1 ---- PE8
- * LED1 ---- PE9
- * LED1 ---- PE10
- * 高电平灭,低电平亮
- ***********************************************/
- void LED2_on(void)
- {
- GPIO_ResetBits(GPIOE,GPIO_Pin_9); //引脚给低电平,亮灯
- }
-
- /*********************************************
- *功能:关LED2灯
- *参数:无
- *返回值:无
- *其他:
- *根据原理图
- * LED1 ---- PE8
- * LED1 ---- PE9
- * LED1 ---- PE10
- * 高电平灭,低电平亮
- ***********************************************/
- void LED2_off(void)
- {
-
- GPIO_SetBits(GPIOE,GPIO_Pin_9); //引脚给低电平,亮灯
- }
-
- /*********************************************
- *功能:开LED3灯
- *参数:无
- *返回值:无
- *其他:
- *根据原理图
- * LED1 ---- PE8
- * LED1 ---- PE9
- * LED1 ---- PE10
- * 高电平灭,低电平亮
- ***********************************************/
- void LED3_on(void)
- {
- GPIO_ResetBits(GPIOE,GPIO_Pin_10); //引脚给低电平,亮灯
- }
-
- /*********************************************
- *功能:关LED3灯
- *参数:无
- *返回值:无
- *其他:
- *根据原理图
- * LED1 ---- PE8
- * LED1 ---- PE9
- * LED1 ---- PE10
- * 高电平灭,低电平亮
- ***********************************************/
- void LED3_off(void)
- {
- GPIO_SetBits(GPIOE,GPIO_Pin_10); //引脚给低电平,亮灯
- }
蜂鸣器:分为有源和无源,有源给电就能用,无源需要自己配置信号源。
三极管:分为基极(Base)、发射极(Emitter)和集电极(Collecor) ,作用是小电流控制大电流,放大信号。
beep.h
- #ifndef __BEEP_H__
- #define __BEEP_H__
- #include "stm32f4xx.h" // Device header
-
- void BEEP_init(void); //初始化蜂鸣器
- void BEEP_on(void); //开启蜂鸣器
- void BEEP_off(void); //关闭蜂鸣器
-
- #endif
beep.c
- #include "beep.h"
- /*********************************************
- *功能:初始化BEEP蜂鸣器
- *参数:无
- *返回值:无
- *其他:
- * 根据原理图
- * BEEP ---- PB10
- * 高电平响,低电平不响
- ***********************************************/
- void BEEP_init(void)
- {
- /**********1.使能GPIOB 外设时钟 ********************/
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
- /**********2.初始化GPIO相关引脚**********************/
- GPIO_InitTypeDef GPIO_InitStruct;
-
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; //模式:输出
- GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; //输出:推挽
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; //引脚:10
- GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //上下拉:上拉
-
- GPIO_Init(GPIOB,&GPIO_InitStruct);
- /************************END*************************/
-
- /***************3.设置默认电平(不响)***************/
- GPIO_ResetBits(GPIOB,GPIO_Pin_10);
-
- }
- /*********************************************
- *功能:打开BEEP蜂鸣器
- *参数:无
- *返回值:无
- *其他:
- * 根据原理图
- * BEEP ---- PB10
- * 高电平响,低电平不响
- ***********************************************/
- void BEEP_on(void)
- {
- GPIO_SetBits(GPIOB,GPIO_Pin_10); //高电平响
- }
- /*********************************************
- *功能:关闭BEEP蜂鸣器
- *参数:无
- *返回值:无
- *其他:
- * 根据原理图
- * BEEP ---- PB10
- * 高电平响,低电平不响
- ***********************************************/
- void BEEP_off(void)
- {
- GPIO_ResetBits(GPIOB,GPIO_Pin_10); //低电平不响
- }
key.h
- #ifndef __KEY_H__
- #define __KEY_H__
- #include "stm32f4xx.h" // Device header
-
- void KEY_Init(void); //初始化KEY按键
- u8 KEY_Scan(void); //扫描按键获取键值
-
- #endif
key.c
- #include "key.h"
-
- /*********************************************
- *功能:初始化KEY按键
- *参数:无
- *返回值:无
- *其他:
- * 原理图
- * KEY1 ---- PE4
- * KEY2 ---- PE5
- * KEY3 ---- PE6
- * KEY4 ---- PC13
- ***********************************************/
- void KEY_Init(void)
- {
- /*******1.使能外设时钟***************/
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOE,ENABLE);
-
- /*******2.初始化GPIO引脚*************/
- GPIO_InitTypeDef GPIO_InitStruct;
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; //模式:输入
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13; //引脚: 13
- GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //上下拉: 上拉
-
- GPIO_Init(GPIOC, &GPIO_InitStruct);
-
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6; //引脚: 4、5、6
- GPIO_Init(GPIOE, &GPIO_InitStruct);
- }
-
- /*********************************************
- *功能:扫描按键
- *参数:无
- *返回值:KEY1返回1,KEY2返回2,KEY3返回3,KEY4返回4,无按键返回0
- *其他:
- * 原理图
- * KEY1 ---- PE4
- * KEY2 ---- PE5
- * KEY3 ---- PE6
- * KEY4 ---- PC13
- ***********************************************/
- #define KEY1 GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_4)
- #define KEY2 GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_5)
- #define KEY3 GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_6)
- #define KEY4 GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13)
- extern void delay_ms();
-
- u8 KEY_Scan(void)
- {
- static u8 flag = 1; //无键按下标志位为1
-
- if( (!KEY1 || !KEY2 || !KEY3 || !KEY4) && (flag == 1))
- {
- flag = 0;
- delay_ms(5); //消抖
- if(!KEY1) return 1;
- if(!KEY2) return 2;
- if(!KEY3) return 3;
- if(!KEY4) return 4;
- }
-
- if( KEY1 && KEY2 && KEY3 && KEY4)
- {
- flag = 1;
- }
-
- return 0;
- }
-
main.c
- #include "stm32f4xx.h" // Device header
- #include "key.h"
- #include "led.h"
- #include "beep.h"
-
- /*********************************************
- *功能:粗略毫秒定时
- *参数:
- * ms:毫秒()
- *返回值:无
- *其他:无
- ***********************************************/
- void delay_ms(uint32_t ms)
- {
- for(uint32_t i=0 ; i < (ms * 10000) ;i++)
- {
- __NOP();
- }
- }
-
- int main()
- {
- /*************1.调用初始化函数*******************/
- KEY_Init();
- LED_init();
- BEEP_init();
-
- /**************2.定义相关变量********************/
- u8 key;
- /**************3.进入操作************************/
- while(1)
- {
- key = KEY_Scan(); //获取键值
- switch(key)
- {
- case 1 :
- GPIO_ToggleBits(GPIOE, GPIO_Pin_8); //LED1位反转
- break;
- case 2 :
- GPIO_ToggleBits(GPIOE, GPIO_Pin_9); //LED2位反转
- break;
- case 3 :
- GPIO_ToggleBits(GPIOE, GPIO_Pin_10); //LED3位反转
- break;
- case 4 :
- GPIO_ToggleBits(GPIOC, GPIO_Pin_13); //LED4位反转
- break;
- }
- }
- }
LSI: 低速内部时钟
LSE:低速外部时钟
HSI: 高速内部时钟
HSE:高速外部时钟
PLL: 锁相环
systick.h
- #ifndef __SYSTICK_H__
- #define __SYSTICK_H__
- #include "stm32f4xx.h" // Device header
-
- void systick_Init(u8 SYSTICK); //初始化滴答定时器
- void delay_us(u32 us); //微秒定时器
- void delay_ms(u32 ms); //毫秒定时器
-
- #endif
systick.c
- #include "systick.h"
-
- u32 _us;
-
- /**************************************
- 功能:初始化滴答定时器
- 参数:
- @SYSTICK:时钟频率
- 返回值:无
- 其他:
- ****************************************/
- void systick_Init(u8 SYSTICK)
- {
- //配置时钟为八分频
- SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
- //一微秒跳动次数
- _us = SYSTICK / 8; // 168/8 = 21
- }
-
- /**************************************
- 功能:微秒定时器
- 参数:
- @us:微秒
- 返回值:无
- 其他:
- ****************************************/
- void delay_us(u32 us)
- {
- SysTick->VAL = 0; //初始化当前计数值
- SysTick->LOAD = us * _us; //装载计数
- SysTick->CTRL |= 0x1; //使能嘀嗒时钟
-
- while( !((SysTick->CTRL >> 16) & 0x1) )
- {
-
- }
- SysTick->VAL = 0; //重置计数值
- SysTick->CTRL &= ~(0x1); //关闭嘀嗒时钟
- }
-
- /**************************************
- 功能:毫秒定时器
- 参数:
- @ms:毫秒
- 返回值:无
- 其他:
- ****************************************/
- void delay_ms(u32 ms)
- {
- while(ms--)
- {
- delay_us(1000);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。