PY32F003F18点灯

延时函数学习完之后,可以学习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;//超时
	}
}
相关推荐
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
Lester_11015 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元5 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-187366133975 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315205 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
Alaso_shuang5 天前
STM32 核心输入、输出模式
stm32·单片机·嵌入式硬件
脚后跟5 天前
AI助力嵌入式物联网项目全栈开发
嵌入式硬件·物联网·ai编程
2501_918126915 天前
stm32死锁是怎么实现的
stm32·单片机·嵌入式硬件·学习·个人开发
z20348315205 天前
STM32F103系列单片机定时器介绍(一)
stm32·单片机
星马梦缘5 天前
驱动层开发——蜂鸣器驱动
stm32·单片机·嵌入式硬件·hal·驱动