OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5484|回复: 6

stm32某个io口设置是输入那我用GPIO——write写会怎么样

[复制链接]

8

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
228
金钱
228
注册时间
2019-7-14
在线时间
85 小时
发表于 2022-7-18 14:59:56 | 显示全部楼层 |阅读模式
10金钱
stm32某个io口设置是输入那我用GPIO——write写会怎么样?
我现在一个IO口有读有写,我想和上位机自己写通讯,不想一个一个位的赋值。那我用GPIO_write写完改变我读口的高低吗?

最佳答案

查看完整内容[请看2#楼]

我的库里没这个函数,不过看你这,“PortVal”这个参数传进去就是写给ODR寄存器,楼上那大哥也给了你一张图,如果你IO口是输入的时候,你写这个ODR寄存器对应的就是设置上拉或者下拉,读的时候影响的就是无输入状态的电平,比如恰好写成上拉了,那么这个口就被拉高了;相反恰好写成下拉的话,这个口就被拉低了。而有输入的时候,基本没影响,来高电平,读的就是高,即使他被写为下拉也是高。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

54

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1044
金钱
1044
注册时间
2022-4-20
在线时间
373 小时
发表于 2022-7-18 14:59:57 | 显示全部楼层
zxc591890601 发表于 2022-7-19 08:40
/**
  * @brief  Writes data to the specified GPIO data port.
  * @param  GPIOx: where x can be ( ...

我的库里没这个函数,不过看你这,“PortVal”这个参数传进去就是写给ODR寄存器,楼上那大哥也给了你一张图,如果你IO口是输入的时候,你写这个ODR寄存器对应的就是设置上拉或者下拉,读的时候影响的就是无输入状态的电平,比如恰好写成上拉了,那么这个口就被拉高了;相反恰好写成下拉的话,这个口就被拉低了。而有输入的时候,基本没影响,来高电平,读的就是高,即使他被写为下拉也是高。
又菜又爱指点
回复

使用道具 举报

54

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1044
金钱
1044
注册时间
2022-4-20
在线时间
373 小时
发表于 2022-7-18 15:17:06 | 显示全部楼层
GPIO_write是哪个函数吗?描述具体一点呢
又菜又爱指点
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8464
金钱
8464
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-7-18 15:50:08 | 显示全部楼层
本帖最后由 LcwSwust 于 2022-7-18 15:52 编辑

点右键goto define of ...可查看函数的代码,看它操作的哪个寄存器,然后对照参考手册看看会有什么影响。
ODR会影响上拉、下拉。

可以利用C语言的位运算来使某些位不变,如GPIOA->ODR=GPIOA->ODR | 0X0F;
也可了解一下BSRR寄存器,即可以改变输出又可以使某些输出位不变。


傲游截图20220718154631.jpg



专治疑难杂症
回复

使用道具 举报

8

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
228
金钱
228
注册时间
2019-7-14
在线时间
85 小时
 楼主| 发表于 2022-7-19 08:40:09 | 显示全部楼层
LcwSwust 发表于 2022-7-18 15:50
点右键goto define of ...可查看函数的代码,看它操作的哪个寄存器,然后对照参考手册看看会有什么影响。
...

/**
  * @brief  Writes data to the specified GPIO data port.
  * @param  GPIOx: where x can be (A..K) to select the GPIO peripheral for STM32F405xx/407xx and STM32F415xx/417xx devices
  *                      x can be (A..I) to select the GPIO peripheral for STM32F42xxx/43xxx devices.
  *                      x can be (A, B, C, D and H) to select the GPIO peripheral for STM32F401xx devices.
  * @param  PortVal: specifies the value to be written to the port output data register.
  * @retval None
  */
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));

  GPIOx->ODR = PortVal;
}

这个是不是就不行了啊?该怎么改啊,不想自己一位一位操作,好多口的
回复

使用道具 举报

8

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
228
金钱
228
注册时间
2019-7-14
在线时间
85 小时
 楼主| 发表于 2022-7-19 08:42:29 | 显示全部楼层
驭剑的秘密 发表于 2022-7-18 15:17
GPIO_write是哪个函数吗?描述具体一点呢

库函数里的函数啊。
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8464
金钱
8464
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-7-19 21:35:18 | 显示全部楼层
zxc591890601 发表于 2022-7-19 08:40
/**
  * @brief  Writes data to the specified GPIO data port.
  * @param  GPIOx: where x can be ( ...

就像我说的用C语言的位运算去操作ODR就好了呀,也可以用BSRR、BRR,不是一位一位操作,而是可以多个位同时操作。
专治疑难杂症
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 14:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表