标准库就有这个可以写一列IO口值的函数:void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); HAL库的是没有的吗? HAL库只找到这个位写函数:void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); 可不可以把这个参数赋值为 GPIO_PIN_All的? 要自己用寄存器写一个?一个一个IO的赋值?这样效率很低下的吧 谢谢! |
你的意思是给GPIOC端口赋值0X00F0, 这样赋值不行的,0X00F0 !=0 所以作为 “1”来处理,
这样你GPIOC端口所有的输出都是"1";如果你要按你的意愿来做,只有直接写寄存器。自己做个函数吧。网上例子挺多的。
void IO_Write_DataBit(uchar data)
{
GPIOC->ODR |= 0xff;
GPIOC->ODR &= data;
}
我也是这样想的,直接操作寄存器算了,上面那个函数应该可以实现了吧
GPIO_PIN_All
也可以或:
GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_6
这样子用HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,x)会有下面的警告的,说参数类型不匹配,参数好像只能是0/1的吧
warning: #188-D: enumerated type mixed with another type
刚用HAL库,发现没有了Write_GPIO();所以就找到了GPIO_PIN_All
假如我要把数据0x68写到PC0-PC7,0x68=0110 1000B,这样就是PC0=0,PC1=1.....,该用哪个库函数一次性搞定呢
发代码看下
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_SET);
#define IO_Data_Set(x) HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,(x&0x00f0))
#define IO_Data_Set(x) HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,(x&0x00f0))
这样子行不行的
这个是全部反转GPIOB的值吧
看的懂那个库函数的,就是找不到GPIO_Write()功能的函数而已,