[应用相关] 在Cube的Hal库做IO口的GPIO组处理方法!一次操作读写多IO端...

[复制链接]
880|2
 楼主| jcky001 发表于 2022-5-16 11:08 | 显示全部楼层 |阅读模式
首先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口一组数据状态怎么弄?
两只袜子 发表于 2022-5-17 11:00 | 显示全部楼层
HAL_GPIO_WritePin (GPIOC,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3........,PIN_RESET );
这样不就行了嘛?
cr315 发表于 2022-5-19 11:00 | 显示全部楼层
HAL库操作又退回到寄存器操作了。HAL库还需要完善。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1650

主题

5706

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部