GPIOF->ODR=((GPIOF->ODR & 0xff00)|cmd)这句寄存器操作如何改成库函数?

2019-10-15 02:27发布

GPIOF->ODR=((GPIOF->ODR & 0xff00)|cmd);            
//GPIOF的ODR寄存器 逻辑与(相乘) 0XFF00,结果 逻辑或(相加) cmd
//此处,只有直接操作寄存器才能达到,只改变 输出数据寄存器ODR 的低8位,
//其它位不变的目的。因为,只有低8位是数据引脚,
//其它位可能是控制引脚,不能改变。


就是上面这句话,实际用挺好用,我改成下面这样全是乱码了,求助大神
PFout(0)=cmd & 0x01;//第1位
PFout(1)=cmd & 0x02;//第2位
PFout(2)=cmd & 0x04;//第3位
PFout(3)=cmd & 0x08;//第4位
PFout(4)=cmd & 0x10;//第5位
PFout(5)=cmd & 0x20;//第6位
PFout(6)=cmd & 0x40;//第7位
PFout(7)=cmd & 0x80;//第8位

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
TGuest
1楼-- · 2019-10-15 03:28
GPIO_ODR寄存器是端口输出数据寄存器,这个位可读可写,读用库函数是GPIO_ReadOutputData,写的库函数是GPIO_Write。这些都是对GPIO_ODR寄存器进行操作。
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  
  GPIOx->ODR = PortVal;
}
初始化端口数据位0x0000 0000,楼主可直接调用GPIO_Write(GPIOF,cmd);来进行操作。那cmd的格式楼主就要自己定义了,详情楼主可以看STM32的中文参考手册和固件库手册。
hcxm1
2楼-- · 2019-10-15 04:00
GPIO_SetBits(GPIOF, cmd & 0xff);
GPIO_ResetBits(GPIOF, (~cmd & 0xff));

这样好像也可以
hcxm1
3楼-- · 2019-10-15 07:57
 精彩回答 2  元偷偷看……
1253171658
4楼-- · 2019-10-15 12:42
我认为这样写应该没什么问题,乱码可能是其他原因造成的
hcxm1
5楼-- · 2019-10-15 16:00
1253171658 发表于 2017-2-12 17:25
我认为这样写应该没什么问题,乱码可能是其他原因造成的

哈哈,可神奇了- -

一周热门 更多>