|
/* stdperiph_gpio.h */ /* Includes ------------------------------------------------------------------*/ #include "stm32f4xx.h" /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __STDPERIPH_GPIO_H #define __STDPERIPH_GPIO_H extern void StdPeriph_GPIO_Config(void); extern void StdPeriph_GPIO_Driver(void); union OutPort { uint8_t all; struct { uint8_t b0:1; // 0 bit0 uint8_t b1:1; // 1 bit1 uint8_t b2:1; // 2 bit2 uint8_t b3:1; // 3 bit3 uint8_t b4:1; // 4 bit4 uint8_t b5:1; // 5 bit5 uint8_t b6:1; // 6 bit6 uint8_t b7:1; // 7 bit7 }bit; }; extern __IO union OutPort Q1; #endif /* stdperiph_gpio.c */ /* Includes ------------------------------------------------------------------*/ #include "stm32f4xx.h" #include "stm32f4xx_gpio.h" #include "stm32f4xx_rcc.h" struct BITS { uint16_t GPIO0:1; // 0 GPIO0 uint16_t GPIO1:1; // 1 GPIO1 uint16_t GPIO2:1; // 2 GPIO2 uint16_t GPIO3:1; // 3 GPIO3 uint16_t GPIO4:1; // 4 GPIO4 uint16_t GPIO5:1; // 5 GPIO5 uint16_t GPIO6:1; // 6 GPIO6 uint16_t GPIO7:1; // 7 GPIO7 uint16_t GPIO8:1; // 8 GPIO8 uint16_t GPIO9:1; // 9 GPIO9 uint16_t GPIO10:1; // 10 GPIO10 uint16_t GPIO11:1; // 11 GPIO11 uint16_t GPIO12:1; // 12 GPIO12 uint16_t GPIO13:1; // 13 GPIO13 uint16_t GPIO14:1; // 14 GPIO14 uint16_t GPIO15:1; // 15 GPIO15 }; union BSRL_REG { uint16_t all; struct BITS bit; }; union BSRH_REG { uint16_t all; struct BITS bit; }; __IO union BSRL_REG GPIOE_BSRL_Shadow; __IO union BSRH_REG GPIOE_BSRH_Shadow; union OutPort { uint8_t all; struct { uint8_t b0:1; // 0 bit0 uint8_t b1:1; // 1 bit1 uint8_t b2:1; // 2 bit2 uint8_t b3:1; // 3 bit3 uint8_t b4:1; // 4 bit4 uint8_t b5:1; // 5 bit5 uint8_t b6:1; // 6 bit6 uint8_t b7:1; // 7 bit7 }bit; }; __IO union OutPort Q1; void StdPeriph_GPIO_Driver(void) { /* 1: 打开MOSFET 0: 关闭MOSFET */ GPIOE_BSRL_Shadow.all = 0; GPIOE_BSRH_Shadow.all = 0; if(Q1.bit.b0 == 0){ GPIOE_BSRH_Shadow.bit.GPIO0 = 1; } else { GPIOE_BSRL_Shadow.bit.GPIO0 = 1; } if(Q1.bit.b1 == 0){ GPIOE_BSRH_Shadow.bit.GPIO1 = 1; } else { GPIOE_BSRL_Shadow.bit.GPIO1 = 1; } if(Q1.bit.b2 == 0){ GPIOE_BSRH_Shadow.bit.GPIO2 = 1; } else { GPIOE_BSRL_Shadow.bit.GPIO2 = 1; } if(Q1.bit.b3 == 0){ GPIOE_BSRH_Shadow.bit.GPIO3 = 1; } else { GPIOE_BSRL_Shadow.bit.GPIO3 = 1; } if(Q1.bit.b4 == 0){ GPIOE_BSRH_Shadow.bit.GPIO4 = 1; } else { GPIOE_BSRL_Shadow.bit.GPIO4 = 1; } if(Q1.bit.b5 == 0){ GPIOE_BSRH_Shadow.bit.GPIO5 = 1; } else { GPIOE_BSRL_Shadow.bit.GPIO5 = 1; } if(Q1.bit.b6 == 0){ GPIOE_BSRH_Shadow.bit.GPIO6 = 1; } else { GPIOE_BSRL_Shadow.bit.GPIO6 = 1; } if(Q1.bit.b7 == 0){ GPIOE_BSRH_Shadow.bit.GPIO7 = 1; } else { GPIOE_BSRL_Shadow.bit.GPIO7 = 1; } GPIOE->BSRRL = GPIOE_BSRL_Shadow.all; GPIOE->BSRRH = GPIOE_BSRH_Shadow.all; } |
STM32
超强工具——STM32CubeMX 你会用吗?
集结出发! STM32全国研讨会系列之一:ST智能门铃中国首秀
关于STM32启动文件的几个小问题
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
STM32L151进入低功耗,并由RTC唤醒的故事
[转]stm32控制NFC模块(PN532)源码(P2P,模拟卡,读写卡等
STM32G070RB+LVGL移植
微信公众号
手机版
注意事项:
1. 可以在主程序或定时程序中调用StdPeriph_GPIO_Driver函数,刷新GPIOE.0~GPIOE.7的状态。
2. 在应用程序中,只需访问Q1的位即可。例如下一句
"Q1.bit.b0 = 1;"就可以修改GPIOE.0的状态为高电平;同样地,"Q1.bit.b0 = 0;"可以修改GPIOE.0的状态为低电平。
StdPeriph_GPIO_Driver函数调用的频率,建议在1~10ms,满足要求的即可。
在MDK-ARM V5.15开发环境,键入"Q1."则会出现自动提示,Q1.all 是访问所有的位, Q1.bit.b7是访问最高位。