河北省城乡住房建设厅网站,同性男做性视频网站,wordpress主题博客选项,云南华琴网络科技有限公司一、PY32F003F18的GPIO介绍 1、PY32F003F18的18个I/O#xff0c;均可作为外部中断#xff1b; 2、每个GPIO都可以由软件配置为输出#xff1a; 1)、推挽输出(push-pull) 2)、开漏极输出(open drain) 注意:驱动电流为8mA; 3、每个GPIO都可以由软件配置为输入#xff1a; 1)、…一、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默认为BootBoot引脚默认置于输入下拉模式 二、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.hvoid 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.hvoid MCU_LED_Init(void);//函数功能:MCU_LED灯引脚初始化,并配置为关灯
void MCU_LED_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;__HAL_RCC_GPIOB_CLK_ENABLE();//使能GPIOB时钟//初始化GPIOB5GPIO_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.hstatic uint8_t fac_us0; //us延时倍乘数void delay_init(void);
void delay_us(uint32_t nus);
void delay_ms(uint32_t nms);//函数功能:配置SysTick定时器每1ms中断一次,优先级为最低
void delay_init(void)
{fac_usSystemCoreClock/1000000;//不论是否使用OS,fac_us都需要使用uwTickFreqHAL_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计数器的中断周期为1msHAL_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,tcnt0;uint32_t reloadSysTick-LOAD;//读取SysTick定时器自动重装载值ticksnus*fac_us; //需要的节拍数 toldSysTick-VAL; //读取系统滴答定时器的计数值while(1){tnowSysTick-VAL;//读取系统滴答定时器的计数值 if(tnow!told){ if(tnowtold)tcnttold-tnow; //这里注意一下SYSTICK是一个递减的计数器就可以了.else tcntreload-tnowtold; toldtnow;if(tcntticks)break; //时间超过/等于要延迟的时间,则退出.} }
}//函数功能:延时nms
//nms:要延时的ms数
//nms:0~65535
void delay_ms(uint32_t nms)
{ delay_us((uint32_t)(nms*1000));//普通方式延时
}//HAL库接口函数
//HAL_Delay(x)延时x毫秒,x0xFFFFFFFF,至少需要延时一个周期
//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()调用
//uwTickFreqHAL_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默认为BootBoot引脚默认置于输入下拉模式
*/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);}
}