寒假学习(11)(HAL库2+模数电11)

这两天尝试了一下直接对寄存器操作控制单片机,在感觉对他的底层工作又有了更深的了解

下面是一些代码对比

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;
}	
相关推荐
zhangrelay8 小时前
新版|-|单片机原理与接口技术-2026持续改进优化-从MEGA2560-ESP32与Wokwi到ROS2-Lyrical与具身智能栈
笔记·单片机·嵌入式硬件·学习
叼烟扛炮12 小时前
Linux 学习笔记(三十三):线程互斥——互斥锁(Mutex)与死锁
linux·运维·服务器·笔记·学习·1024程序员节
m4Rk_14 小时前
【论文阅读】Agent 记忆机制(113):Agentic Memory Management——从“检索相关信息”走向“管理 Agent 内部记忆”
论文阅读·人工智能·学习·开源·github
辣知15 小时前
辣知·化智92 《山海经》里的史前密码
学习
鬼手点金15 小时前
KV Cache 未必是一次性的:可编辑、可组合的“笔记”
java·人工智能·笔记·学习·自动化·1024程序员节
kyrie_sakura16 小时前
大模型学习18 大模型学习 - LangChain2_Model I/O
学习·自然语言处理
宝绿特塑业再生科技17 小时前
板材收缩率不稳,户外家具装配尺寸为何对不上:从切割尺寸变化到接缝不一的系统性排查与对策
笔记·科技·学习·生活·户外家具·hdpe再生颗粒·hdpe
~城南花已开~18 小时前
Intel E810 SR-IOV VF Spoofcheck 防伪造测试-KVM3
服务器·网络·笔记·学习·ubuntu·etl工程师
我命由我1234520 小时前
6-3.Python 异常处理 - 异常处理进阶(else 块与 finally 块、异常传递、自定义异常)
开发语言·前端·数据库·后端·python·学习·java-ee
外收内放20 小时前
FastAPI猜字谜实战(8):收官
开发语言·python·学习·fastapi