首先stm32CUbe的Hal库没有对IO口的组处理了......
那么有时候用到需要对一组IO口,怎么进行操作呢?
最简单最傻瓜的办法是类似下面的:
HAL_GPIO_WritePin (GPIOC,GPIO_PIN_0,GPIO_PIN_SET );
HAL_GPIO_WritePin (GPIOC,GPIO_PIN_1,GPIO_PIN_SET );
HAL_GPIO_WritePin (GPIOC,GPIO_PIN_2,GPIO_PIN_RESET );
.
.
.
等等,
效率低先不说,看着都蛋疼,
还有弊端,就是必须知道我要把那个口驱动的电平知道...
加入模拟并口操作传输数据怎么办?
对IO口进行一组写入数据可以这样:
void GPIO_WRCMD(uint8_t cmd){ uint8_t pin_cmd; for(uint8_t i=0;i<8;i++) { pin_cmd = (cmd&(1<<i))? 1:0; HAL_GPIO_WritePin(GPIOC,1<<i,pin_cmd); }}
但是这样也是很**的方法,直接操作寄存器一次写完,省了多少时间啊。。。
所以改成下面函数方法:
void GPIO_WRCMD(GPIO_TypeDef* GPIOx,uint16_t cmd){GPIOx->ODR = cmd;}
但是上面的是针对连续的操作,要是不连续的操作呢?
上面的办法是利用Hal库提供的办法,
楼下继续,读入IO口一组数据状态怎么弄?
|