你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

库函数与寄存器操作

[复制链接]
风铃草2 提问时间:2014-12-10 14:08 /
阅读主题, 点击返回1楼
收藏 评论28 发布时间:2014-12-10 14:08
28个回答
小贾-370388 回答时间:2014-12-12 15:20:08
时不时你那里配置的出了问题程序没有执行配置就返回了啊?
wenyangzeng 回答时间:2014-12-12 19:57:36
你好像把PE2,PE3设置成输出了:
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; ;
回答时间:2014-12-13 09:35:08
wenyangzeng 发表于 2014-12-12 19:57
你好像把PE2,PE3设置成输出了:
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; ;

楼主说按我改的也不行。我的模拟I2C就这样配置的。前面留贴有。
wambob 回答时间:2014-12-14 11:27:27
那就是你的库函数的问题了
奔跑小蜗牛 回答时间:2014-12-14 12:16:17
官方库的bug,很明显 GPIOx->IDR & GPIO_Pin,在GPIO_Pin = 0 的时候,这句话读出来的值永远都是0.   (xxxxx & 0) == 0,这是&计算的基本常识.


if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)
  {
    bitstatus = (uint8_t)Bit_SET;
  }

改为如下测试:

if (((GPIOx->IDR >> GPIO_Pin) & 0x01) != (uint32_t)Bit_RESET)  
  {  
    bitstatus = (uint8_t)Bit_SET;  
  }  
风铃草2 回答时间:2014-12-15 08:24:08
奔跑小蜗牛 发表于 2014-12-14 12:16
官方库的bug,很明显 GPIOx->IDR & GPIO_Pin,在GPIO_Pin = 0 的时候,这句话读出来的值永远都是0.   (xxxxx  ...

#define GPIO_Pin_0                 ((uint16_t)0x0001)  /* Pin 0 selected */
#define GPIO_Pin_1                 ((uint16_t)0x0002)  /* Pin 1 selected */
#define GPIO_Pin_2                 ((uint16_t)0x0004)  /* Pin 2 selected */
#define GPIO_Pin_3                 ((uint16_t)0x0008)  /* Pin 3 selected */
#define GPIO_Pin_4                 ((uint16_t)0x0010)  /* Pin 4 selected */
#define GPIO_Pin_5                 ((uint16_t)0x0020)  /* Pin 5 selected */
#define GPIO_Pin_6                 ((uint16_t)0x0040)  /* Pin 6 selected */
#define GPIO_Pin_7                 ((uint16_t)0x0080)  /* Pin 7 selected */
#define GPIO_Pin_8                 ((uint16_t)0x0100)  /* Pin 8 selected */
#define GPIO_Pin_9                 ((uint16_t)0x0200)  /* Pin 9 selected */
#define GPIO_Pin_10                ((uint16_t)0x0400)  /* Pin 10 selected */
#define GPIO_Pin_11                ((uint16_t)0x0800)  /* Pin 11 selected */
#define GPIO_Pin_12                ((uint16_t)0x1000)  /* Pin 12 selected */
#define GPIO_Pin_13                ((uint16_t)0x2000)  /* Pin 13 selected */
#define GPIO_Pin_14                ((uint16_t)0x4000)  /* Pin 14 selected */
#define GPIO_Pin_15                ((uint16_t)0x8000)  /* Pin 15 selected */
#define GPIO_Pin_All               ((uint16_t)0xFFFF)  /* All pins selected */
哪里来的 0 ?
Dylan疾风闪电 回答时间:2014-12-16 18:32:38
这个函数应该不会存在这样的问题。
IO模拟I2C的话,个人建议将IO口配置成输入模式,再去读取端口输入电平,读完再切回输出。
如果这样的逻辑下还出现库函数和寄存器操作不一样的,那我也没什么好的建议了。呵呵。
wambob 回答时间:2014-12-16 21:28:59
函数也是通过寄存器来达到目的的,现在的问题是,直接用寄存器正常,而用库函数不正常,还用怀疑其他啊,肯定是库函数方面的问题
风铃草2 回答时间:2014-12-17 09:02:16
wambob 发表于 2014-12-16 21:28
函数也是通过寄存器来达到目的的,现在的问题是,直接用寄存器正常,而用库函数不正常,还用怀疑其他啊,肯定是 ...

问题解决了,用库函数的话 多加点延迟就能读到数据了
王建 回答时间:2014-12-17 09:26:00
本帖最后由 王建 于 2014-12-17 09:28 编辑

GPIO_ReadInputDataBit换成
GPIO_ReadInputData
看看



所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版