FTHR-G0001开发板按键点灯

分享作者:xiaochenaiyanxi
作者昵称:chenhanzhang
评测品牌:灵动微电子
评测型号:MM32G0001A6T
发布时间:2024-12-30 10:36:01
0
概要
功能包含了按键控制LED灯的亮灭以及按三种频率闪烁之间切换
开源口碑分享内容

代码

主函数:

#include "mm32g0001.h" //不带延时函数的头文件

#include "stdio.h"

#include <string.h>

#include <key.h>

#include <platform.h>


static uint16_t key_num;  


int main(void)

{

KEY_INIT( );

TIMER1_INIT( );

 while (1)

 {

 }

}

key.c:

#include "key.h"

#include "led.h"


static uint8_t key_now_num;

static uint8_t key_formerly_num;

static int times;


void KEY_INIT(void)

{

GPIO_InitTypeDef GPIO_Init_structure;

RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA,ENABLE);

GPIO_Init_structure.GPIO_Mode=GPIO_Mode_IPU;

GPIO_Init_structure.GPIO_Pin=GPIO_Pin_2;  //key

GPIO_Init_structure.GPIO_Speed=GPIO_Speed_High;

GPIO_Init(GPIOA,&GPIO_Init_structure);

}


void TIMER1_INIT(void)

{  

   RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM1, ENABLE);


   TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;

   TIM_TimeBaseStruct.TIM_Prescaler         = 1-1;//(Prescaler + 1) * (Period+1£© = Ãë * ¶¨Ê±Æ÷ʱÖÓÆµÂÊ

   TIM_TimeBaseStruct.TIM_CounterMode       = TIM_CounterMode_Up;

   TIM_TimeBaseStruct.TIM_Period            = 48000- 1;//48000000/48000=1000

   TIM_TimeBaseStruct.TIM_ClockDivision     = TIM_CKD_Div1;

   TIM_TimeBaseStruct.TIM_RepetitionCounter = 0;

   TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStruct);


NVIC_InitTypeDef NVIC_Init_Structure;

 NVIC_Init_Structure.NVIC_IRQChannel=TIM1_BRK_UP_TRG_COM_IRQn;

NVIC_Init_Structure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init_Structure.NVIC_IRQChannelPriority=2;

NVIC_Init(&NVIC_Init_Structure);


TIM_ClearFlag(TIM1, TIM_FLAG_Update);

TIM_Cmd(TIM1, ENABLE);

TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);

}

uint8_t Get_KEY_Num()

{

if(GET_KEY1 == Bit_RESET)

{

return KEY1_NUM;

}

return 0;

}

uint8_t KEY_Main()

{

static uint8_t i,key_num_mode;

key_formerly_num= key_now_num;

key_now_num=Get_KEY_Num();

if(key_formerly_num!=key_now_num && key_now_num==KEY1_NUM)

{

key_num_mode=(key_num_mode+1)%6;

}

switch(key_num_mode)

{

case 0:

GPIO_LED_OFF();

break;

case 1:

GPIO_LED_OPEN();

break;

case 2:

GPIO_LED_OFF();

break;

case 3:

if(times%100==0)

{GPIO_WriteBit(GPIOA, GPIO_Pin_11, (BitAction)(i & 0x01)); i=~i;times=0;}

break;

case 4:

if (times%500 == 0)

{GPIO_WriteBit(GPIOA, GPIO_Pin_11, (BitAction)(i & 0x01)); i=~i;times=0;}

break;

case 5:

if (times%1000 == 0)

{GPIO_WriteBit(GPIOA, GPIO_Pin_11, (BitAction)(i & 0x01)); i=~i;times=0;}

break;

default:

break;

}

return key_num_mode;

}


void TIM1_BRK_UP_TRG_COM_IRQHandler(void)

{

if (RESET != TIM_GetITStatus(TIM1, TIM_IT_Update))

   {

KEY_Main();

times++;

     TIM_ClearITPendingBit(TIM1, TIM_IT_Update);

   }

}

key.h:

#ifndef _KEY_H_

#define _KEY_H_


#include "mm32g0001.h"


#define GET_KEY1 GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)

#define KEY1_NUM 1


void KEY_INIT(void);

void TIMER1_INIT(void);

uint8_t KEY_Main();



#endif /* _MAIN_H_ */


led.c:

#define _GPIO_LED_TOGGLE_C_


#include <stdio.h>

#include "platform.h"

#include "led.h"


void GPIO_LED_Configure(void)

{

   GPIO_InitTypeDef GPIO_InitStruct;


   RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);


   GPIO_StructInit(&GPIO_InitStruct);

   GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_11;

   GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;

   GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_Out_PP;

   GPIO_Init(GPIOA, &GPIO_InitStruct);


   GPIO_WriteBit(GPIOA, GPIO_Pin_11, Bit_SET);

}

void GPIO_IO_Toggle(GPIO_TypeDef *GPIOn, uint16_t PINn)

{

   if (Bit_RESET == GPIO_ReadOutputDataBit(GPIOn, PINn))

   {

      GPIO_SetBits(GPIOn, PINn);

   }

   else

   {

       GPIO_ResetBits(GPIOn, PINn);

   }

}

void GPIO_LED_Toggle_Sample(void)

{

   GPIO_LED_Configure();

   while (1)

   {

       GPIO_IO_Toggle(GPIOA, GPIO_Pin_11);

       PLATFORM_DelayMS(500);

   }

}

void GPIO_LED_OPEN(void)

{

GPIO_LED_Configure();

GPIO_ResetBits(GPIOA, GPIO_Pin_11);

}

void GPIO_LED_OFF(void)

{

GPIO_LED_Configure();

GPIO_SetBits(GPIOA, GPIO_Pin_11);

}

led.h:

#ifndef _GPIO_LED_TOGGLE_H_

#define _GPIO_LED_TOGGLE_H_


#ifdef __cplusplus

extern "C" {

#endif


#include "hal_conf.h"


void GPIO_LED_Configure(void);

void GPIO_LED_Toggle_Sample(void);

void GPIO_LED_OPEN(void);

void GPIO_LED_OFF(void);


#ifdef __cplusplus

}

#endif

#endif /* _GPIO_LED_TOGGLE_H_ */

全部评论
暂无评论
0/144