#define SDA_read GPIOE->IDR & GPIO_Pin_3 //GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)
我用库函数的GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)这个来读IO口,做了几天发现 居然有的时候会读不到。但是只要改成GPIOE->IDR & GPIO_Pin_3
它就能正常读到了 。
调试进去一看
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
uint8_t bitstatus = 0x00;
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)
{
bitstatus = (uint8_t)Bit_SET;
}
else
{
bitstatus = (uint8_t)Bit_RESET;
}
return bitstatus;
}
就没差别 ,可是死活读不到 只要一换成 GPIOE->IDR & GPIO_Pin_3就成功读取了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
IO模拟I2C的话,个人建议将IO口配置成输入模式,再去读取端口输入电平,读完再切回输出。
如果这样的逻辑下还出现库函数和寄存器操作不一样的,那我也没什么好的建议了。呵呵。
一周热门 更多>