OpenEdv-开源电子网

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

STM32-F4 不能正常读IO状态

[复制链接]

3

主题

14

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-8-4
在线时间
6 小时
发表于 2019-10-28 15:57:35 | 显示全部楼层 |阅读模式
4金钱
如下程序:
1   my_mem_init(SRAMIN);          //初始化内部内存池
2   delay_ms(1);                         //必须加一句,不然HX711读出的数据都是0,不清楚为什么????
3   exfuns_init();                        //为FATFS分配内存
4   HX711_Init();                        //HX711初始化
5   res=f_mount(fs[0],"0:",1);         //挂载外部FLASH.

情况:
1、如果去掉第2句,读HX711数据全是零。
2、如果将第4句放在第5句后面,也能读出HX711数据。
3、如果将第4句放在第1句上面,也能读出HX711数据。

如果去掉第2句,读HX711数据全为0。在读HX711函数里,检测引脚的状态一直是低电平,实际被读引脚电平是变化的,即使人为维持一个高电平,程序读出的也是低电平。
但是该引脚在读HX711函数外读出的状态都是正常的。


是初始化内部内存池影响的???
现在不清楚问题出在哪里


最佳答案

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

检查初始化GPIO的结构体是不是全部赋值了,因为结构体是局部变量,有时候不把结构体赋一个固定的值可能初始化就会出错。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4031
金钱
4031
注册时间
2015-11-14
在线时间
545 小时
发表于 2019-10-28 15:57:36 | 显示全部楼层
检查初始化GPIO的结构体是不是全部赋值了,因为结构体是局部变量,有时候不把结构体赋一个固定的值可能初始化就会出错。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2019-10-29 02:55:10 | 显示全部楼层
帮顶
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-8-4
在线时间
6 小时
 楼主| 发表于 2019-10-29 09:57:17 来自手机 | 显示全部楼层
正点原子 发表于 2019-10-29 02:55
帮顶

感谢来捧场。内存也检查过了没有超过112KB,但是动态内存大小设置成50K,没有加延时也能正常读IO的状态。如果初始化不正常为什么再函数外可以正常读Io状态
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4031
金钱
4031
注册时间
2015-11-14
在线时间
545 小时
发表于 2019-10-29 14:11:04 | 显示全部楼层
刚上电有些器件还没稳定,要等待其他器件稳定才能正常操作。
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-8-4
在线时间
6 小时
 楼主| 发表于 2019-10-29 14:31:56 来自手机 | 显示全部楼层
Electronic 发表于 2019-10-29 14:11
刚上电有些器件还没稳定,要等待其他器件稳定才能正常操作。

不是这个原因。
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-8-4
在线时间
6 小时
 楼主| 发表于 2019-10-29 14:36:38 来自手机 | 显示全部楼层
今天又做了个试验把用于动态内存分配的空间由100K一直降到62K后才能正常工作,如果再在全局定义一个1K的数组就会有
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-8-4
在线时间
6 小时
 楼主| 发表于 2019-10-29 14:37:12 来自手机 | 显示全部楼层
就会有异常
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-8-4
在线时间
6 小时
 楼主| 发表于 2019-10-29 15:37:46 来自手机 | 显示全部楼层
Electronic 发表于 2019-10-29 14:35
检查初始化GPIO的结构体是不是全部赋值了,因为结构体是局部变量,有时候不把结构体赋一个固定的值可能初始 ...

全部初始化,关键是如果不加delayms就会不正常,但是在函数体外IO的状态都是一样的,我通过别的方式是不管用的,刚才检查堆和栈都是正常的,这是从业这么多年遇到最诡异的事情了
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-8-4
在线时间
6 小时
 楼主| 发表于 2019-10-29 15:43:26 来自手机 | 显示全部楼层
Electronic 发表于 2019-10-29 14:35
检查初始化GPIO的结构体是不是全部赋值了,因为结构体是局部变量,有时候不把结构体赋一个固定的值可能初始 ...

全部初始化,关键是如果不加delayms就会不正常,但是在函数体外IO的状态就是正常的
,我通过别的方式延时是不管用的,刚才检查堆和栈都是正常的,这是从业这么多年遇到最诡异的事情了
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2016-3-16
在线时间
12 小时
发表于 2019-10-29 16:17:54 | 显示全部楼层
有没有可能是数据不一致的问题,关闭缓存试一试。
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-8-4
在线时间
6 小时
 楼主| 发表于 2019-10-29 21:58:26 来自手机 | 显示全部楼层
gsn1417 发表于 2019-10-29 16:17
有没有可能是数据不一致的问题,关闭缓存试一试。

首先感谢关注,不过应该不是这个原因,明天试试。今天寄存器都监控了一切正常,使用原子哥的初始化函数my_mem_init(SRAMIN); (函数内部就是通过指针给指定的内存赋值0)仅接着初始化Io口,只要把读Io口状态放在一个函数里读出的电平都是低电平,同时在主函数大循环里读Io的电平是真实的电平。如果初始化Io口没起作用的话,在主函数里读也应该读不对呀,但是可以读出来,奇怪了。如果把初始化Io放在my_mem_init(SRAMIN); ,则一切正常,但是my_mem_init(SRAMIN); 里很简单。我也是无语了,感兴趣的话你们可以用开发板试试,我用的是405。明天我用探索版的开发板试试。
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-8-4
在线时间
6 小时
 楼主| 发表于 2019-11-11 11:38:38 | 显示全部楼层
果真如此,漏掉了上啦,别的函数调用后把那个变量内容改变了,监控对照内存才验证的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-15 20:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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