完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
#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就成功读取了 |
|
相关推荐
28个回答
|
|
|
好奇怪啊,理论上来说用库函数操作相对于寄存器操作已经延时了,我觉得你的这个根本原因还是没有找到,能否把完整的工程放出来,方便查找 |
|
|
|
|
|
库函数也TM是操作寄存器,只是包装了下,就不能读出来了?
|
|
|
|
|
|
|
|
|
|
|
|
晚上看看能不能找到,再放出来给看看 |
|
|
|
|
|
不知道 调试应答信号的时候 用万用表量是3.3V 程序用库函数读出的结果是0 用寄存器操作读出是1 |
|
|
|
|
|
#define SDA_read GPIOE->IDR & GPIO_Pin_3 //GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) 我的是这样的 if(SDA_read==0) return false 用万用表量SDA是3.3V 如果用库函数 就报错 用寄存器就不会 |
|
|
|
|
|
|
|
|
|
|
屠鸡勇士李运好 发表于 2018-9-6 15:30 i = gpio_readinputdatabie(gpioe,gpio_pin_3); if(i==0) return false 这样试试看 |
|
|
|
|
|
读端口前需要先置位成高电平,然后操作。以前在lcd操作时遇见过。你试试
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
2810 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
2420 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2288 浏览 0 评论
2404 浏览 1 评论
1643 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 17:40 , Processed in 0.929972 second(s), Total 89, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
12655