PY32F003F18按键输入

news2025/1/19 8:16:07

一、PY32F003F18的GPIO介绍
1、PY32F003F18的18个I/O,均可作为外部中断;
2、每个GPIO都可以由软件配置为输出:
1)、推挽输出(push-pull)
2)、开漏极输出(open drain)
注意:驱动电流为8mA;
3、每个GPIO都可以由软件配置为输入:
1)、浮空输入(floating)
2)、上拉输入(pull-up)
3)、下拉输入(pull-down)
4)、模拟输入(analog)
4、每个GPIO都可以由软件配置为外设复用功能;
5、Debug引脚默认被置于复用功能上拉或下拉模式:
PA14默认为SWCLK: 置于下拉模式
PA13默认为SWDIO: 置于上拉模式
PF4默认为Boot:Boot引脚默认置于输入下拉模式

二、GPIO输入输出的用户函数
1、__HAL_RCC_GPIOA_CLK_ENABLE();//使能GPIOA时钟
2、__HAL_RCC_GPIOB_CLK_ENABLE();//使能GPIOB时钟
3、__HAL_RCC_GPIOF_CLK_ENABLE();//使能GPIOF时钟
4、HAL_GPIO_Init(GPIO_TypeDef ?*GPIOx, GPIO_InitTypeDef *GPIO_Init);
根据GPIO_InitTypeDef型结构变量初始化GPIOx端口
5、HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
将GPIOx端口的第GPIO_Pin引脚设置输出电平值为PinState
6、HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
将GPIOx端口的第GPIO_Pin引脚设置输出为反向电平,即输出电平翻转
7、HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
读取"GPIOx端口的第GPIO_Pin引脚"输入的电平值

三、测试程序

#include "Key.h"
#include "py32f0xx_hal.h"

void Key1_Init(void);

//函数功能:Key1引脚初始化
void Key1_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructureure;

  __HAL_RCC_GPIOA_CLK_ENABLE();  //GPIOA时钟使能

  GPIO_InitStructureure.Pin = GPIO_PIN_12;       //选择第12脚
  GPIO_InitStructureure.Pull = GPIO_NOPULL;      //引脚上拉和下拉都没有被激活
  GPIO_InitStructureure.Speed = GPIO_SPEED_FREQ_MEDIUM;//配置GPIO速度为中速
	GPIO_InitStructureure.Mode = GPIO_MODE_INPUT;//设置引脚工作模式为输入浮空模式
	HAL_GPIO_Init(GPIOA,&GPIO_InitStructureure);
	//根据GPIO_InitStructureure结构变量指定的参数初始化GPIOA的外设寄存器
}

#include "LED.h"

void MCU_LED_Init(void);

//函数功能:MCU_LED灯引脚初始化,并配置为关灯
void MCU_LED_Init(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;

  __HAL_RCC_GPIOB_CLK_ENABLE();//使能GPIOB时钟

  //初始化GPIOB5
  GPIO_InitStructure.Pin = GPIO_PIN_5;                  //选择第5脚
  GPIO_InitStructure.Pull = GPIO_PULLUP;                //引脚上拉被激活
  GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_VERY_HIGH; //配置GPIO速度为极高
	GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;        //设置引脚工作模式为推挽输出方式

  HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
	//根据GPIO_InitStructure结构变量指定的参数初始化GPIOB的外设寄存器

	MCU_LED_Off();
}
#ifndef __LED_H
#define __LED_H

#include "py32f0xx_hal.h"

#define MCU_LED_On()      HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET)  //输出低电平开灯
#define MCU_LED_Off()     HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET)    //输出高电平关灯
#define MCU_LED_Toggle()  HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5)                //输出电平翻转

extern void MCU_LED_Init(void);

#endif /* __LED_H */
#include "delay.h"

static uint8_t  fac_us=0; //us延时倍乘数

void delay_init(void);
void delay_us(uint32_t nus);
void delay_ms(uint32_t nms);

//函数功能:配置"SysTick定时器"每1ms中断一次,优先级为最低
void delay_init(void)
{
	fac_us=SystemCoreClock/1000000;//不论是否使用OS,fac_us都需要使用
	uwTickFreq=HAL_TICK_FREQ_1KHZ;
	//准备配置"SysTick定时器"每1ms中断一次
  //HAL_TICK_FREQ_10HZ= 100,"SysTick计数器"的中断周期为100ms
  //HAL_TICK_FREQ_100HZ= 10,"SysTick计数器"的中断周期为10ms
  //HAL_TICK_FREQ_1KHZ = 1,"SysTick计数器"的中断周期为1ms

	HAL_InitTick(PRIORITY_LOWEST);//配置"SysTick定时器"每1ms中断一次,优先级为最低
//	HAL_Init();//配置"SysTick定时器"每1ms中断一次,优先级为最低

	HAL_SetTickFreq(uwTickFreq);//设置"SysTick滴答定时器"的中断周期为uwTickFreq个毫秒
}

//函数功能:延时nus
//nus:要延时的us数.	
//nus:0~204522252(最大值即2^32/fac_us)	    								   
void delay_us(uint32_t nus)
{		
	uint32_t ticks;
	uint32_t told,tnow,tcnt=0;
	uint32_t reload=SysTick->LOAD;//读取"SysTick定时器"自动重装载值
	ticks=nus*fac_us; 						//需要的节拍数 
	told=SysTick->VAL;        	  //读取"系统滴答定时器的计数值"
	while(1)
	{
		tnow=SysTick->VAL;//读取"系统滴答定时器的计数值"	
		if(tnow!=told)
		{	    
			if(tnow<told)tcnt+=told-tnow;	//这里注意一下SYSTICK是一个递减的计数器就可以了.
			else tcnt+=reload-tnow+told;	    
			told=tnow;
			if(tcnt>=ticks)break;			//时间超过/等于要延迟的时间,则退出.
		}		
	}										    
}

//函数功能:延时nms
//nms:要延时的ms数
//nms:0~65535
void delay_ms(uint32_t nms)
{	
	delay_us((uint32_t)(nms*1000));//普通方式延时
}

//HAL库接口函数
//HAL_Delay(x)延时x毫秒,x<0xFFFFFFFF,至少需要延时一个周期
//HAL_SuspendTick();不使能"SysTick滴答定时器"中断
//HAL_ResumeTick();使能"SysTick滴答定时器"中断
//HAL_GetTickFreq();读取"SysTick滴答定时器"的中断频率
//HAL_SetTickFreq(Freq);设置"SysTick滴答定时器"的中断频率为Freq
//HAL_GetTickPrio();读取"SysTick滴答定时器"的中断优先级
//HAL_GetTick();读取"SysTick滴答定时器"的中断次数计数器uwTick
//HAL_IncTick();供SysTick_Handler()调用
//uwTickFreq=HAL_TICK_FREQ_1KHZ;//准备配置"SysTick定时器"每1ms中断一次
//HAL_InitTick(PRIORITY_LOWEST);//配置"SysTick定时器"每1ms中断一次,优先级为最低
#include "py32f0xx_hal.h"
#include "delay.h"
#include "Key.h"
#include "LED.h"

/*
PY32F003F18的18个I/O,均可作为外部中断
每个GPIO都可以由软件配置为输出:推挽输出(push-pull),开漏极输出(open drain);注意:驱动电流为8mA;
每个GPIO都可以由软件配置为输入:浮空输入(floating),上拉输入(pull-up),下拉输入(pull-down),模拟输入(analog);
每个GPIO都可以由软件配置为外设复用功能;

Debug引脚默认被置于复用功能上拉或下拉模式:
PA14默认为SWCLK: 置于下拉模式
PA13默认为SWDIO: 置于上拉模式
PF4默认为Boot:Boot引脚默认置于输入下拉模式
*/

void Delay_ms(uint32_t x_ms);

int main(void)
{
//	HSE_Config();
	//初始化"HSI,HSE,LSI振荡器",HSE用作系统时钟(SYSCLK),同时配置"AHB时钟(HCLK)和APB时钟(PCLK)"

	delay_init();

	Key1_Init();//Key1引脚初始化
	MCU_LED_Init();//MCU_LED灯引脚初始化,并配置为关灯

	HAL_Delay(1000);

  while (1)
  {
		if( Key1_LevelValue() ) MCU_LED_Off();
		else MCU_LED_On();
		delay_ms(500);
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/967156.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视频图像处理算法opencv在esp32及esp32s3上面的移植,也可以移植openmv

opencv在esp32及esp32s3上面的移植 Opencv简介 OpenCV是一个基于Apache2.0许可&#xff08;开源&#xff09;发行的跨平台计算机视觉和机器学习软件库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上&#xff0c;它轻量级而且高效——由一系列 C 函数和少量…

02-请解释一下Java的内存模型和happens-before规则?【Java面试题总结】

请解释一下Java的内存模型和happens-before规则&#xff1f; 概念&#xff1a;Java内存模型&#xff0c;简称JMM&#xff0c;是一种定义了多线程程序中内存访问行为的规范。它定义了线程如何与主内存和工作内存进行交互&#xff0c;以及如何保证多线程程序的正确性和可见性。J…

聚鑫数藏平台——引领数字资产管理新风向

随着数字经济的飞速发展&#xff0c;新金融生态应运而生。区块链技术的崭新突破&#xff0c;使数字资产的重要性日益凸显&#xff0c;为投资者带来了前所未有的机遇和挑战。在此背景下&#xff0c;聚鑫数藏平台横空出世&#xff0c;引领着数字资产管理的新风向。 聚鑫数藏平台&…

2023数学建模国赛四天速成计划来啦!(内含大量资料)

大家好呀。高教社杯全国大学生数学建模竞赛&#xff08;下称国赛&#xff09;9.7日下午6点就正式开始了&#xff1a; 在这里给大家带来一个五天的速成计划啦&#xff01;大家可以收藏本文章或者转发到你们队友群哈&#xff0c;此外我还会发放很多资料给大家&#xff0c;注意&am…

数据结构|栈和队列以及实现

栈和队列 一、栈1.1栈的概念及结构1.2栈的实现 二、队列2.1队列的概念及结构2.2队列的实现 一、栈 1.1栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和数据删除的一端称为栈顶&#xff0c;另一端称为栈…

UE4 植物生长

这个可以改变SplineMesh朝向

leetcode 724. 寻找数组的中心下标

2023.9.3 本题先 求出数组总和sum&#xff0c;再寻找数组的中心下标&#xff1a;if(sum - temp -nums[i] temp) return i; 代码如下&#xff1a; class Solution { public:int pivotIndex(vector<int>& nums) {//求数组元素总和int sum 0; for(int num : nums…

【C++技能树】继承概念与解析

Halo&#xff0c;这里是Ppeua。平时主要更新C&#xff0c;数据结构算法&#xff0c;Linux与ROS…感兴趣就关注我bua&#xff01; 继承 0. 继承概念0.1 继承访问限定符 1. 基类和派生类对象赋值兼容转换2. 继承中的作用域3. 派生类中的默认成员函数4.友元5.继承中的静态成员6.菱…

lenovo联想笔记本小新 潮7000-14IKBR 2018款(81GA)原装出厂Windows10系统镜像

自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 链接&#xff1a;https://pan.baidu.com/s/1ynP4d5z7MPF9l5U5lCjDzQ?pwdhjvj 提取码&#xff1a;hjvj 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;ISO 文件大小&#x…

2.4 关系数据库

思维导图&#xff1a; 前言&#xff1a; 这段话描述了“关系数据库”及其背后的理论基础。首先&#xff0c;我们来拆分这段话并逐步解释每部分。 关系数据库是采用关系模型作为数据组织方式的数据库。 这句话的关键是“关系模型”。关系模型是一种表示和操作数据库的理论模型…

软考备考-程序员-考试介绍和考试大纲

软考程序员-考试介绍和考试大纲 全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试 计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;以下简称计算机软件资格考试&#xff09;是原中国计算机软件专业技术资格和水平考试&#xff0…

第三方系统测试怎么做?有些什么流程

系统测试 软件系统研发出来以后&#xff0c;产品的各个模板功能是否能够正常运转需要进行软件系统测试。而对于普通的互联网企业来说&#xff0c;软件测试的各项工作已经超出开发工作内容&#xff0c;由开发人员进行系统测试不仅需要耗费软件团队精力&#xff0c;可能测试效果…

Pyecharts数据可视化(三)

目录 1.绘制词云图 2.绘制桑基图 3.绘制平行坐标图 4.绘制结点图 5.绘制地图 本文主要介绍了如何利用Pyecharts绘制词云图、桑基图、平行坐标图、节点图和地图&#xff0c;虽然这些图平时不是很常用&#xff0c;但是看起来还是比较好看的&#xff0c;如果放在论文当中&am…

leetcode793. 阶乘函数后 K 个零(java)

阶乘函数后 K 个零 题目描述二分法代码模拟 题目描述 难度 - 困难 阶乘函数后 K 个零 f(x) 是 x! 末尾是 0 的数量。回想一下 x! 1 * 2 * 3 * … * x&#xff0c;且 0! 1 。 例如&#xff0c; f(3) 0 &#xff0c;因为 3! 6 的末尾没有 0 &#xff1b;而 f(11) 2 &#xf…

Bito使用手册

第一步&#xff1a;输入网站 https://alpha.bito.co/bitoai/ 第二步&#xff1a;填写邮箱 第三步&#xff1a;登录邮箱&#xff0c;获取验证码 第四步&#xff1a;填写验证码 第五步&#xff1a;完成

Scala的函数式编程与高阶函数,匿名函数,偏函数,函数的闭包、柯里化,抽象控制,懒加载等

Scala的函数式编程 函数式编程 解决问题时&#xff0c;将问题分解成一个一个的步骤&#xff0c;将每个步骤进行封装&#xff08;函数&#xff09;&#xff0c;通过调用这些封装好的步骤&#xff0c;解决问题。 例如&#xff1a;请求->用户名、密码->连接 JDBC->读取…

zabbix监控平台部署

目录 前言 一、zabbix的基本概述 &#xff08;一&#xff09;、zabbix的工作流程 &#xff08;二&#xff09;、zabbix的构成 &#xff08;三&#xff09;、zabbix的监控对象 &#xff08;四&#xff09;、zabbix的常用术语 &#xff08;五&#xff09;、zabbix进程详解…

植物根系基因组与数据分析

1.背景 这段内容主要是关于植物对干旱胁迫的反应&#xff0c;并介绍了生活在植物体内外以及根际的真菌和细菌的作用。然而&#xff0c;目前对这些真菌和细菌的稳定性了解甚少。作者通过调查微生物群落组成和微生物相关性的方法&#xff0c;对农业系统中真菌和细菌对干旱的抗性…

windows 2012服务器配置nginx后无法访问域名的问题

环境&#xff1a;Windows 2012 R2 Nginx 问题&#xff1a;确认域名解析到服务器ip已生效&#xff08;通过ping域名地址确认域名已指向该ip&#xff09;&#xff0c;确认nginx配置无误&#xff08;绑定域名、配置端口、配置网站文件目录&#xff09;&#xff0c;但无法从外网访…

6年打工人,我的所见、所想、所感。

咪哥杂谈 本篇阅读时间约为 7 分钟。 1 前言 本篇文章全部基于个人心得总结&#xff0c;欢迎大家讨论&#xff0c;无论是赞同还是反对&#xff0c;所有观点均接受。 原本是 5 周年打工人的心得&#xff0c;愣是让我拖了一年变成了 6 周年心得。 最近一年多一直投身于区块链行业…