|
//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) //输入 |
为什么在CubeMX中无法分析模型?而在云服务器可以?
STM32H7掉电存储数据
STM32H7的LSE起振问题
STM32H743ZIT6的4K SRAM备份域数据,当VTAB引脚的电压低于2.8V就会丢失数据,2.8V以上是正常,请问是什么问题?
STM32H747I_eval_QSPI flashloader工程疑问
STM32H7 TIM3-CH3/4 能不能用于编码器输入。
STM32H7中FMC
STM32H7上中FMC上的NAND FLASH问题
STM32的FMC_D数据线,FMC_A地址线,没有按CubeMX的标准映射连接,能否让SDRAM正常工作
STM32H7的FMC数据线和SDRAM的数据线交叉连接,地址线也交叉连接,并不是D0对D0、A0对A0这样对应,SDRAM能正常工作吗?
微信公众号
手机版
带操作单元。
不过,尽管没有这个位带操作单元,但并不影响我们对内存或寄存器进行位操作。自行编写代码即可。
比方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)可以使用。