news 2026/3/3 5:44:00

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
寒假学习(11)(HAL库2+模数电11)

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

下面是一些代码对比

#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); }
#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); } }
#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; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/28 21:38:35

Oauth2Request

Oauth2Request 你现在展示的 Oauth2Request 类,是 Jeecg 项目基于 JustAuth 框架实现的自定义 SINOSOFT 平台 OAuth 登录请求处理类,继承自 JustAuth 的 AuthDefaultRequest,重写了 OAuth 登录流程的核心方法,完成「获取授权码 → 换取访问令牌 → 获取用户信息」的完整逻…

作者头像 李华
网站建设 2026/2/28 12:23:39

Java线程池:面试中你必须掌握的核心知识点!

文章目录 Java线程池:面试中你必须掌握的核心知识点!前言一、线程池的基本概念什么是线程池?为什么要使用线程池?线程池的工作原理 二、核心类与接口1. Executor接口2. ThreadPoolExecutor类3. Executors工厂类4. Future和Callabl…

作者头像 李华
网站建设 2026/3/2 10:31:09

2026-02-02 全国各地响应最快的 BT Tracker 服务器(移动版)

数据来源:https://bt.me88.top 序号Tracker 服务器地域网络响应(毫秒)1http://180.112.57.159:6969/announce江苏镇江移动102http://211.75.210.221:6969/announce广东广州移动363http://60.249.37.20:6969/announce广东惠州移动364udp://132.226.6.145:6969/annou…

作者头像 李华
网站建设 2026/3/2 2:05:57

从XML到JSON的转换与解析

在现代数据处理中,XML和JSON是两种常用的数据交换格式。XML因为其可读性和结构化而被广泛使用,而JSON则因其轻量和易解析在Web开发中大受欢迎。本文将通过一个实际案例,展示如何从XML文件转换为JSON,并进一步解析JSON数据。 转换XML为JSON 首先,我们需要一个工具或库来将…

作者头像 李华