
//IO口操作宏定义 define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))define MEM_ADDR(addr) ((volatile unsigned long )(addr))define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))//IO口地址映射 define GPIOA_ODR_Addr (GPIOA_BASE+20) //0x40020014define GPIOB_ODR_Addr (GPIOB_BASE+20) //0x40020414define GPIOC_ODR_Addr (GPIOC_BASE+20) //0x40020814define GPIOD_ODR_Addr (GPIOD_BASE+20) //0x40020C14define GPIOE_ODR_Addr (GPIOE_BASE+20) //0x40021014define GPIOF_ODR_Addr (GPIOF_BASE+20) //0x40021414define GPIOG_ODR_Addr (GPIOG_BASE+20) //0x40021814define GPIOH_ODR_Addr (GPIOH_BASE+20) //0x40021C14define GPIOI_ODR_Addr (GPIOI_BASE+20) //0x40022014define GPIOA_IDR_Addr (GPIOA_BASE+16) //0x40020010define GPIOB_IDR_Addr (GPIOB_BASE+16) //0x40020410define GPIOC_IDR_Addr (GPIOC_BASE+16) //0x40020810define GPIOD_IDR_Addr (GPIOD_BASE+16) //0x40020C10define GPIOE_IDR_Addr (GPIOE_BASE+16) //0x40021010define GPIOF_IDR_Addr (GPIOF_BASE+16) //0x40021410define GPIOG_IDR_Addr (GPIOG_BASE+16) //0x40021810define GPIOH_IDR_Addr (GPIOH_BASE+16) //0x40021C10define GPIOI_IDR_Addr (GPIOI_BASE+16) //0x40022010//IO口操作,只对单一的IO口! //确保n的值小于16! define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //输入define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //输入define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //输出define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //输入define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //输出define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //输入define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //输出define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //输入define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //输出define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) //输入define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) //输出define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n) //输入define PHout(n) BIT_ADDR(GPIOH_ODR_Addr,n) //输出define PHin(n) BIT_ADDR(GPIOH_IDR_Addr,n) //输入define PIout(n) BIT_ADDR(GPIOI_ODR_Addr,n) //输出define PIin(n) BIT_ADDR(GPIOI_IDR_Addr,n) //输入 |
stm32Cube Visual studio code 如何设置STM32H7的下载算法
请教下关于 stm32h7x5,7x7 系列双核 dsi ltdc 显示驱动的时钟频率配置 ?
请教SPI用LL读取的问题
STM32H743 LAN8720 CUBEMX配置lwIP无法ping通,分配pbuf失败
STM32H750VBT6 + W5500 + 激光雷达点云
STM32H750XBH6的外置SDRAM相关问题
FW_H7 V1.12.1-HAL库DMA双缓冲配置
STM32H743vit6无法连接
X-CUBE-AZRTOS-H7
STM32H755双核编程如何入门
带操作单元。
不过,尽管没有这个位带操作单元,但并不影响我们对内存或寄存器进行位操作。自行编写代码即可。
比方STM32的库里就有相关函数 或宏可以使用。
#define SET_BIT(REG, BIT) ((REG) |= (BIT))
#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
#define READ_BIT(REG, BIT) ((REG) & (BIT))
#define CLEAR_REG(REG) ((REG) = (0x0))
#define WRITE_REG(REG, VAL) ((REG) = (VAL))
#define READ_REG(REG) ((REG))
对于GPIO指定管脚的操作,有HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)可以使用。