打印
[应用相关]

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

[复制链接]
714|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库还需要完善。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1522

主题

4618

帖子

6

粉丝