WCH沁恒单片机
直播中

xymbmcu

12年用户 1040经验值
擅长:可编程逻辑
私信 关注
[问答]

CH32V307 GPIO是如何选择上拉或下拉的?

配置端口为带上下拉的输入时,说明书内无如何选择上拉或下拉的说明,
看实例代码由端口输出寄存器OUTDR控制上拉或下拉,理解是是否正确?
        if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)        {          GPIOx->BCR = (((uint32_t)0x01) BSHR = (((uint32_t)0x01) <

  
  

回帖(4)

王娜

2022-5-26 14:46:06
您好,若需要配置为上下拉输入模式时,需要通过GPIO配置寄存器(GPIOx_CFGLR/
GPIOx_CFGHR
)配置为带有上下拉的输入模式,比如MODEx位配置为00,表示输入模式,CNFx位配置为10,表示带有上下拉模式,具体可见下图配置寄存器说明。关于具体是上拉还是下拉,可通过BCR或者BSHR寄存器决定。若下拉,设置端口复位寄存器(GPIOx_BCR),若上拉,设置端口复位/置位寄存器(GPIOx_BSHR)的0-15对应位置1。

if-else语句里的两个寄存器分别为端口复位寄存器(GPIOx_BCR)和端口复位/置位寄存器(GPIOx_BSHR),关于这两个寄存器的具体说明如下图。

举报

王国花

2022-5-26 14:46:11
我的问题如何设定IO输入时的上拉与下拉?
看代码码跟置位与复位寄存器有关
举报

张茜

2022-5-26 14:46:42
您好,GPIO引脚的上下拉输入配置与OUTDR寄存器无关,OUTDR寄存器是一个端口输出寄存器,表示端口输出的数据。关于端口复位/置位寄存器(GPIOx_BSHR)或者端口复位寄存器(GPIOx_BCR)里描述的清除对应的OUTDR位,意思是说:无论是配置为输入或者输出,当你要将这个引脚拉高或者拉低时,都会对OUTDR寄存器写0复位,然后设置引脚拉高拉低。关于上下拉寄存器,当配置为输入时,对BSHR或BCR寄存器进行相应的操作即可设置上下拉。
举报

李波

2022-5-26 14:46:52
引脚输入输出切换后,希望输出保持原来的状态,
1、引脚在输出状态,OUTDR寄存器输出有效。
2、引脚 配置为输入上拉,这时,OUTDR会被复位
3、 重新配置为输出,这时我必须重新设置OUTDR的值,因为原始值第二步被复位了
举报

更多回帖

发帖
×
20
完善资料,
赚取积分