PY32F003F18点灯

news2025/3/10 23:02:40

延时函数学习完之后,可以学习PY32F003F18的GPIO输出功能。

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

2、GPIO输出状态:

1)、push-pull,推挽输出

2)、open drain,开漏极输出

3)、上拉/下拉

#define  GPIO_NOPULL        (0x00000000u)   //引脚上拉和下拉都没有被激活
#define  GPIO_PULLUP        (0x00000001u)   //引脚上拉被激活,Pull-up activation
#define  GPIO_PULLDOWN      (0x00000002u)   //引脚下拉被激活,Pull-down activation

3、测试程序

#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_SET)   //输出高电平开灯
#define MCU_LED_Off()     HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5, GPIO_PIN_RESET) //输出高电平关灯
#define MCU_LED_Toggle()  HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5)                //输出电平翻转

extern void MCU_LED_Init(void);

#endif /* __LED_H */
#include "py32f0xx_hal.h"
#include "LED.h"
		
void Delay_ms(uint32_t x_ms);

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

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

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

  while (1)
  {
		MCU_LED_Toggle();
		Delay_ms(500);
  }
}

//函数功能:延时x_ms毫秒
void Delay_ms(uint32_t x_ms)
{
	uint8_t flag;
  uint32_t tickstart;
	uint32_t tickend;
	uint32_t tmp;

	tickstart = HAL_GetTick();
	//读取"SysTick计数器"的中断次数计数器uwTick

	flag=1;
	if (x_ms==0) flag=0;
	while (flag)
	{
		tickend=HAL_GetTick();
		//读取"SysTick计数器"的中断次数计数器uwTick
		if(tickend>=tickstart) tickend=tickend - tickstart;
		else
		{
			tmp=0xFFFFFFFF;
			tmp=tmp-tickstart;
			tickend=tickend+tmp;
//			tickend=tickend+0xFFFFFFFF-tickstart;
		}
		if ( tickend > x_ms) flag=0;//超时
	}
}

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

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

相关文章

Prometheus+grafana安装配置

Prometheus安装配置 Prometheus下载地址 官方地址:Download | Prometheus 可根据系统版本下载想要的安装包,复制链接地址 wget https://github.com/prometheus/prometheus/releases/download/v2.33.3/prometheus-2.33.3.linux-amd64.tar.gzwg 解压pr…

protues仿真时有时候串口虚拟中端不弹窗的问题

在使用proteus的时候,有时候你会发现点击调试开始运行后,串口虚拟终端没有自动弹窗的问题,其实照成这种现象的原因是你在使用的过程中移动了器件位置或者是对整个视窗使用鼠标滚动进行缩放了,如果要重新弹窗则需要进行以下操作: …

手撕 视觉slam14讲 ch13 代码(2)基本类的抽象

在正式写系统之前,我们在上一篇分析了基本的3个类:帧、2D特征点、3D地图点,这次我们开始代码实现这些基本数据结构: 1.帧类 常见的SLAM系统中的帧(Frame)需要包含以下信息:id,位姿…

容器技术Linux Namespaces和Cgroups

对操作系统了解多少,仅仅敲个命令吗 操作系统虚拟化(容器技术)的发展历程 1979 年,UNIX 的第 7 个版本引入了 Chroot 特性。Chroot 现在被认为是第一个操作系统虚拟化(Operating system level virtualization&#x…

CSS使两个不同的div居中对齐的三种解决方案

在CSS中,有多种方法可以让两个不同的div居中对齐,包括相对定位和绝对定位。以下是两种常见的方法: 方法一:使用Flexbox Flexbox是一个用于创建灵活布局的CSS3模块。使用Flexbox,可以很容易地对元素进行居中对齐。 H…

C++基础语法——多态

1.什么是多态? 多态是面向对象编程中的一个概念,它允许不同的对象对同一个消息作出不同的响应。简单来说,多态是指同一种操作或方法可以在不同的对象上产生不同的行为。这种灵活性使得代码更加可扩展和可维护。在多态中,对象的类型…

弯道超车必做好题集锦三(C语言编程题)

目录 前言: 1.单词倒排 方法1:scanf匹配特定字符法 方法2: 双指针法 2.统计每个月兔子的总数 方法1:斐波那契数列 方法2:斐波那契的递归 3.珠玑妙算 方法:遍历 4.寻找奇数(单身狗&#…

【图解算法数据结构】分治算法篇 + Java代码实现

文章目录 一、重建二叉树二、数值的整数次方三、打印从 1 到最大的 n 位数四、二叉搜索树的后序遍历序列五、数组中的逆序对 一、重建二叉树 public class Solution {int[] preorder;HashMap<Integer, Integer> dic new HashMap<>();public TreeNode buildTree(in…

可视化流程设计平台有啥优势?

在流程化办公发展趋势逐渐明朗的今天&#xff0c;运用什么样的平台可以帮助广大用户朋友实现这一目标&#xff1f;可视化流程设计平台是轻量级、更灵活、易操作、效率高的平台&#xff0c;可以快速定制客户专属的框架平台&#xff0c;为每一位客户朋友做好数据管理&#xff0c;…

【小沐学Unity3d】3ds Max 骨骼动画制作(蒙皮修改器skin)

文章目录 1、简介2、蒙皮修改器3.1 骨骼对象测试3.2 Biped对象测试 3、动画制作4、FBX导出结语 1、简介 “蒙皮”修改器是一种骨骼变形工具&#xff0c;主要设计用于通过另一个对象对一个对象进行变形来创建角色动画。可使用骨骼、样条线和其他对象变形网格、面片和 NURBS 对象…

【Java 基础篇】Java 数组使用详解:从零基础到数组专家

如果你正在学习编程&#xff0c;那么数组是一个不可或缺的重要概念。数组是一种数据结构&#xff0c;用于存储一组相同类型的数据。在 Java 编程中&#xff0c;数组扮演着非常重要的角色&#xff0c;可以帮助你组织、访问和操作数据。在本篇博客中&#xff0c;我们将从零基础开…

如何使用C++11原子操作实现自旋锁

什么是自旋锁&#xff1f; C自旋锁是一种低层次的同步原语&#xff0c;用于保护共享资源的访问。自旋锁是一种轻量级的锁&#xff0c;适用于短时间的资源锁定。 自旋锁的特点&#xff1a;当一个线程尝试获取已经被另一个线程占有的自旋锁时&#xff0c;这个线程会进入一个循环…

从入门到精通,30天带你学会C++【第六天:与或非三兄弟和If判断语句(博主目前最长文章,2514字)】(学不会你找我)

目录 前言 计算机里的真和假 与或非三兄弟 ​编辑与运算&#xff08;&&&#xff09; 具体说明表格&#xff1a; 举个栗子1&#xff1a; 或运算&#xff08;||&#xff09; 具体说明表格&#xff1a; 举个栗子2&#xff1a; 非运算&#xff08;!&#xff09…

python编写MQTT订阅程序

Download | Eclipse Mosquitto 1、下载&#xff1a; https://mosquitto.org/files/binary/win64/mosquitto-2.0.17-install-windows-x64.exe 2、安装&#xff1a; 3、conf配置 1)使用notepad打开“C:\Program Files\mosquitto\mosquitto.conf”另存为c:\myapp\msquitto\mo…

C++的多重继承

派生类都只有一个基类,称为单继承(Single Inheritance)。除此之外,C++也支持多继承(Multiple Inheritance),即一个派生类可以有两个或多个基类。 多继承容易让代码逻辑复杂、思路混乱,一直备受争议,中小型项目中较少使用,后来的 Java、C#、PHP 等干脆取消了多继承。 …

漏洞发现-web应用发现探针类型利用(43)

关于在真实环境下面&#xff0c;这个漏洞该如何发现 这里老师把它分成了三块第一类是 #已知cms 如常见的dedecms&#xff0c;discuz&#xff0c;wordpress等源码结构&#xff0c;这些都是网上比较知名的php源码的cms的名称&#xff0c;这是我们在国内常见的几个程序&#xf…

【Java 基础篇】Java 方法使用详解:让你轻松掌握方法的奥秘

如果你正在学习Java编程&#xff0c;方法是一个不可或缺的重要概念。方法允许你将代码组织成可重用的块&#xff0c;提高了代码的可维护性和可读性。在本篇博客中&#xff0c;我们将深入探讨Java方法的使用&#xff0c;从基础概念开始&#xff0c;逐步介绍如何定义、调用、传递…

Netty-ChannelPipeline

EventLoop可以说是 Netty 的调度中心&#xff0c;负责监听多种事件类型&#xff1a;I/O 事件、信号事件、定时事件等&#xff0c;然而实际的业务处理逻辑则是由 ChannelPipeline 中所定义的 ChannelHandler 完成的&#xff0c;ChannelPipeline 和 ChannelHandler应用开发的过程…

剑指 Offer 44. 数字序列中某一位的数字(中等)

题目&#xff1a; class Solution { //本题单纯找规律&#xff0c;要注意通过n%digits来判断有几个位数为digits的数 public:int findNthDigit(int n) {long base 9, digits 1; //digits代表位数while(n-base*digits>0){ //该循环是为了确定目标数字所在…

找不到msvcp140.dll的解决方法【msvcp140.dll修复工具下载】

今天&#xff0c;我将为大家分享一个与我们日常工作息息相关的话题——msvcp140.dll重新安装的5种解决方法。在接下来的时间里&#xff0c;我将向大家介绍什么是msvcp140.dll,为什么会丢失&#xff0c;以及它的用途。最后&#xff0c;我将为大家提供5种解决方法&#xff0c;帮助…