embedded - 如何在stm32的GPIO MODER寄存器中定义位
问题描述
我需要将端口 D 的引脚 15 定义为通用输出模式,为此我需要将引脚 31,30 设置为 01。GPIOD->MODER 是我的寄存器 (1<<30) 和 (1<<31)正在移动 1 到 30 和 31 位我知道位或是 | 和按位和是 & 设置这些值的技术是什么?谢谢。
解决方案
如果您不想更改任何其他位,则需要先将它们归零,然后再设置它们。
typedef enum
{
GPIO_MODER_INPUT = 0b00,
GPIO_MODER_OUTPUT = 0b01,
GPIO_MODER_ALTERNATE = 0b10,
GPIO_MODER_ANALOG = 0b11,
}GPIO_MODER;
void GPIO_SetMODER(GPIO_TypeDef *gpio, int pin, GPIO_MODER mode)
{
uint32_t reg = gpio -> MODER;
reg &= ~(0b11 << (pin * 2));
reg |= (mode & 0b11) << (pin * 2);
gpio -> MODER = reg;
}
推荐阅读
- c++ - Boost Libraries not linking properly on Windows
- python - How to make multiple keys in Tkinter
- fmi - FMU getState/setState for model exchange with PyFMI
- java - Populate Jtable with vector
- java - Android TV 模拟器无法识别媒体键事件
- php - Login Page is refreshing regardless of if the correct login information is entered
- mysql - Docker MySQL 8 如何设置 --secure-file-priv
- oracle - ODI 11g Interface SQL Data to Multiple Flat Files
- python - 如何在数据帧匹配中获取第一个索引
- postgresql - Postgres 用于截断外键标识符的具体算法是什么?