这两天尝试了一下直接对寄存器操作控制单片机,在感觉对他的底层工作又有了更深的了解
下面是一些代码对比
cpp
#include "BUZZ.h"
//void BEEP_ON(void)
//{
// GPIOG->ODR |= GPIO_ODR_ODR12;
//}
//
//void BEEP_OFF(void )
//{
// GPIOG->ODR &= ~GPIO_ODR_ODR12;
//}
//void BEEP_tog(void)
//{
//
// if((GPIOG->IDR&GPIO_IDR_IDR12) != 0)
// {
// GPIOG->ODR &= ~GPIO_ODR_ODR12;
//
// }
// else
// {
//
// GPIOG->ODR |= GPIO_ODR_ODR12;
// }
//
//}
void BEEP_ON(void)
{
HAL_GPIO_WritePin(GPIOG,GPIO_PIN_12,GPIO_PIN_SET);
}
void BEEP_OFF(void )
{
HAL_GPIO_WritePin(GPIOG,GPIO_PIN_12,GPIO_PIN_RESET);
}
void BEEP_tog(void)
{
HAL_GPIO_TogglePin(GPIOG,GPIO_PIN_12);
}
cpp
#include "led.h"
//void led_init(void)
//{
//
// //配置RCC
// RCC->APB2ENR |= RCC_APB2ENR_IOPGEN;
// //配置GPIO
// GPIOG->CRH |= GPIO_CRH_MODE14;
// GPIOG->CRH &= ~(GPIO_CRH_CNF14);
// GPIOG->CRH |= GPIO_CRH_MODE15;
// GPIOG->CRH &= ~(GPIO_CRH_CNF15);
//
//
//}
//void led_on(int led_num)
//{
// if(14 == led_num)
// {
// GPIOG->ODR |= GPIO_ODR_ODR14;
// }
//
// else if(15 == led_num)
// {
// GPIOG->ODR |= GPIO_ODR_ODR15;
// }
//}
//void led_off(int led_num)
//{
// if(14 == led_num)
// {
// GPIOG->ODR &= ~GPIO_ODR_ODR14;
// }
//
// else if(15 == led_num)
// {
// GPIOG->ODR &= ~GPIO_ODR_ODR15;
// }
//}
//void led_togle(int num)
//{
// if(14 == num)
// {
// if((GPIOG->IDR&GPIO_IDR_IDR14) != 0)
// {
// //GPIOG->ODR &= ~GPIO_ODR_ODR14;
// led_off(14);
// }
// else
// {
// led_on(14);
// //GPIOG->ODR |= GPIO_ODR_ODR14;
// }
// }
//
// if(15 == num)
// {
// if((GPIOG->IDR&GPIO_IDR_IDR15) != 0)
// {
// led_off(15);
// //GPIOG->ODR &= ~GPIO_ODR_ODR15;
// }
// else
// {
// led_on(15);
// //GPIOG->ODR |= GPIO_ODR_ODR15;
// }
// }
//}
void led_on(int led_num)
{
if(14 == led_num)
{
HAL_GPIO_WritePin(GPIOG,GPIO_PIN_14,GPIO_PIN_SET);
}
else if(15 == led_num)
{
HAL_GPIO_WritePin(GPIOG,GPIO_PIN_15,GPIO_PIN_SET);
}
}
void led_off(int led_num)
{
if(14 == led_num)
{
HAL_GPIO_WritePin(GPIOG,GPIO_PIN_14,GPIO_PIN_RESET);
}
else if(15 == led_num)
{
HAL_GPIO_WritePin(GPIOG,GPIO_PIN_15,GPIO_PIN_RESET);
}
}
void led_togle(int num)
{
if(14 == num)
{
HAL_GPIO_TogglePin(GPIOG,GPIO_PIN_14);
}
if(15 == num)
{
HAL_GPIO_TogglePin(GPIOG,GPIO_PIN_15);
}
}
cpp
#include "key.h"
//void key_int(void)
//{
// //打开时钟
// RCC->APB2ENR |= RCC_APB2ENR_IOPGEN;
//
// //配置工作模式 mode : 00 cnf: 01
//
// GPIOG->CRL &= ~GPIO_CRL_MODE3;
// GPIOG->CRL &= ~GPIO_CRL_CNF3_1;
// GPIOG->CRL |= GPIO_CRL_CNF3_0;
//
// GPIOG->CRL &= ~GPIO_CRL_MODE4;
// GPIOG->CRL &= ~GPIO_CRL_CNF4_1;
// GPIOG->CRL |= GPIO_CRL_CNF4_0;
//
// GPIOG->CRL &= ~GPIO_CRL_MODE5;
// GPIOG->CRL &= ~GPIO_CRL_CNF5_1;
// GPIOG->CRL |= GPIO_CRL_CNF5_0;
//
//
// //全部改为上拉输入
//
// GPIOG->ODR |= GPIO_ODR_ODR3;
// GPIOG->ODR |= GPIO_ODR_ODR4;
// GPIOG->ODR |= GPIO_ODR_ODR5;
//
//}
//unsigned int key_scan(void)
//{
// unsigned int num = 0;
//
// if((GPIOG->IDR&GPIO_IDR_IDR3) == 0)
// {
// Delay_ms(10);
// if((GPIOG->IDR&GPIO_IDR_IDR3) == 0)
// {
// while((GPIOG->IDR&GPIO_IDR_IDR3) == 0);
// num = 1;
// }
// }
//
// else if((GPIOG->IDR&GPIO_IDR_IDR4) == 0)
// {
// Delay_ms(10);
// if((GPIOG->IDR&GPIO_IDR_IDR4) == 0)
// {
// while((GPIOG->IDR&GPIO_IDR_IDR4) == 0);
// num = 2;
// }
// }
//
// if((GPIOG->IDR&GPIO_IDR_IDR5) == 0)
// {
// Delay_ms(10);
// if((GPIOG->IDR&GPIO_IDR_IDR5) == 0)
// {
// while((GPIOG->IDR&GPIO_IDR_IDR5) == 0);
// num = 3;
// }
// }
//
// return num;
//}
unsigned int key_scan(void)
{
unsigned int num = 0;
if(HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_3) == GPIO_PIN_RESET)
{
HAL_Delay(10);
if(HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_3) == GPIO_PIN_RESET)
{
while(HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_3) == GPIO_PIN_RESET);
num = 1;
}
}
else if(HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_4) == GPIO_PIN_RESET)
{
HAL_Delay(10);
if(HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_4) == GPIO_PIN_RESET)
{
while(HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_4) == GPIO_PIN_RESET);
num = 2;
}
}
if(HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_5) == GPIO_PIN_RESET)
{
HAL_Delay(10);
if(HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_5) == GPIO_PIN_RESET)
{
while(HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_5) == GPIO_PIN_RESET);
num = 3;
}
}
return num;
}