矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 5541|回复: 19

败了两块STM32的最小系统板,结果有一块有奇怪的问题

[复制链接]
     
发表于 2020-4-30 21:42:41 | 显示全部楼层 |阅读模式
       在TB上两家店买的STM32F103C8T6的最小系统板,板型引脚都相同,结合DHT22温湿度传感器,打算做个小模块放车上,开始时显示电压,隔一段时间就改为显示温度跟湿度。程序用arduino搭建,简单方便。结果写到板子上,第一块板子能正确运行,如下图。
上电时显示电压,并会记录最低电压(用于记录车辆启动时电瓶的最低电压,供以后参考)

a4.jpg

启动后就改为显示温度湿度

a3.jpg


      把程序烧录到第二块STM32板上,结果就只有电压显示正常,

a1.jpg


     温湿度无法正确显示了。

a2.jpg

     程序相同,开发软件也相同,还以为这块板子的这个用于连接DHT22的GPIO口有问题,改了另一个GPIO,依旧是读取的数值不正常!!至此感到无解,只能呵呵了。
     
 楼主| 发表于 2020-4-30 22:51:34 | 显示全部楼层
bd2bo 发表于 2020-4-30 22:07
如果你只买一片,后面那片,那就惨了。程序会把你玩坏的。

是呀,如果只买了一块,或者程序首先就写在第二块上,那就真的是调程序调到崩溃!!
回复 支持 1 反对 0

使用道具 举报

     
发表于 2020-4-30 22:07:24 | 显示全部楼层
如果你只买一片,后面那片,那就惨了。程序会把你玩坏的。
回复 支持 1 反对 0

使用道具 举报

     
发表于 2020-4-30 22:05:43 | 显示全部楼层
本帖最后由 iffi123 于 2020-4-30 22:11 编辑

校验有使用吗? 查看一下原始采集值

LZ买的板子和我上次的一摸一样,连BOOT跳线排针的颜色都一样黄色
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-4-30 22:50:28 | 显示全部楼层
iffi123 发表于 2020-4-30 22:05
校验有使用吗? 查看一下原始采集值

LZ买的板子和我上次的一摸一样,连BOOT跳线排针的颜色都一样黄色

没有使用校验,我用逻辑分析仪接上第二块STM32板,GPIO口上采集到的信号是正确的,也就是跟第一块正常的STM32板子是相同的。更为神奇的是,我程序里没有读取DHT22超时的设计,所以如果不接上DHT22的话,程序是会卡死的。我不接DHT22,正常的STM32那板子在显示完电压之后就卡住了,而第二块板子居然可以照样显示温度跟湿度值是6553.5,所以这个真的是一件摸不着头脑的事了。
回复 支持 反对

使用道具 举报

     
发表于 2020-4-30 23:15:46 | 显示全部楼层
我的电脑! 发表于 2020-4-30 22:50
没有使用校验,我用逻辑分析仪接上第二块STM32板,GPIO口上采集到的信号是正确的,也就是跟第一块正常的S ...

最小系统板最好用正品芯片,这样可以排除芯片自身的问题
回复 支持 反对

使用道具 举报

     
发表于 2020-5-1 00:11:21 | 显示全部楼层
质量很关键,次的会走很多弯路
回复 支持 反对

使用道具 举报

     
发表于 2020-5-1 10:58:16 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-5-1 13:06:34 | 显示全部楼层
可能真的是万份之一的机会碰到了,因为同一个程序,在另一块板子上是正确显示,所以程序应该是没有问题的。这块板子的GPIO口测试也是正常的,就不知为什么程序写进去后运行就会出现数据错误,因为单单运行DHT22的温湿度程序,也不能出现确的数据。

a5.jpg

程序,这个只是用于验证,没有做超时检测跟负温度时的调整,也没有做小数部份处理,全部显示整数。

#define PIN PA0

uint8_t  data[5];
uint16_t shidu,tem;

void Star(void)   //启动DHT22
{
  pinMode(PIN,OUTPUT);
  digitalWrite(PIN,LOW);
  delay(2);
  digitalWrite(PIN,HIGH);
  delayMicroseconds(20);
  digitalWrite(PIN,LOW);
  pinMode(PIN,INPUT);
   while(!digitalRead(PIN));
   while(digitalRead(PIN));
}
uint8_t readbit(void) // 读1BIT 的数据
{
  uint8_t shi=0;
  uint8_t ci,temp;
  for(ci=0;ci<8;ci++)
  {
  while(!digitalRead(PIN));
  delayMicroseconds(40);
  shi=shi<<1;
  if(digitalRead(PIN)==1)
    {
    shi=shi|1;
    while(digitalRead(PIN));
    }
  }
return shi;
}

void readdata(void)
{
  uint8_t a;
  for(a=0;a<5;a++)
  {
  data[a]=readbit();  
  }
        shidu=((data[0]<<8)+data[1]);
        tem=((data[2]<<8)+data[3]);  
}
void setup()
{
    Serial.begin(9600);
    delay(2000);   //上电先延时2秒,等DHT22完成初始化
}

void loop()
{
  Star();
  readdata();
  Serial.print("温度:");
  Serial.print(tem);
  Serial.print("      相对湿度:");
  Serial.print(shidu);
  Serial.println("%");
  delay(2000);
}
回复 支持 反对

使用道具 举报

     
发表于 2020-5-1 19:39:41 | 显示全部楼层
本帖最后由 iffi123 于 2020-5-1 20:44 编辑
我的电脑! 发表于 2020-5-1 13:06
可能真的是万份之一的机会碰到了,因为同一个程序,在另一块板子上是正确显示,所以程序应该是没有问题的。 ...


lz是用软件延时的办法,我也写过,有时会超时(校验通不过,加入超时机制不会死机),用定时器的输入捕获更加方便

把40位的CCR值保存在数组里,测完再统一处理

回复 支持 反对

使用道具 举报

     
发表于 2020-5-2 08:29:36 | 显示全部楼层
是不是晶振频率不一致造成的。建议楼主用成熟的驱动程序,读写试试。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-5-6 17:45:14 | 显示全部楼层
peiguoqing 发表于 2020-5-2 08:29
是不是晶振频率不一致造成的。建议楼主用成熟的驱动程序,读写试试。

不是的,两块板子的晶振频率都是一样,而且也在IDE里面把单片机频率设到正常的工作频率72M了。是这块STM32的芯片有奇怪的问题,好像是内核运算中会有出错。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-5-6 17:50:15 | 显示全部楼层
iffi123 发表于 2020-5-1 19:39
lz是用软件延时的办法,我也写过,有时会超时(校验通不过,加入超时机制不会死机),用定时器的输入捕获 ...

不插DHT22的话,因为程序在初始化时,有以下这两句

   while(!digitalRead(PIN));
   while(digitalRead(PIN));

所以程序绝对是会卡死在这里的。能正常运行的STM32系统板,不接DHT22的话,就是会这卡死在这里,而这块不正常的STM32系统板,程序居然可以直接继续跑下去,在串口上可以不断读到65535的数值,所以这才是我觉得最不可思议的地方。但这块不正常的STM32板子,GPIO口似乎也是正常的,做模拟量输入可以正常,做高低电平输出也是正常的。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-7-21 18:36:18 | 显示全部楼层
上段时间把这个显示安装在双闪灯开关旁边。

IMG_6167.JPG

装回车上,功能正常。

IMG_6185.JPG

IMG_6187.JPG

还拍了个小视频

https://v.youku.com/v_show/id_XNDY2NDk3ODI0NA==.html

只是开孔不是我的强项,这个开关开得特别的丑。后来有车友私信叫我量产一些出来,凑了几个人,于是就去打版了。新版本进行了一些改进,原本的电压显示,是用STM32的供电电压做基准电压的,实测这个电压有时会有点飘。新的就外接一路TL431做基准电压,这样就稳定多了。为了防止TL431出故障后不影响整体功能,所以程序里有对TL431的返回值做判断,如果超出允许范围,则改回用STM32的供电电压做基准电压。

IMG_6710.JPG

还有就是如果DHT22传感器在使用中出现故障,就会出现提示,3S后改为显示电压值。

IMG_6711.JPG

最后还新买了一个双闪灯开关回来,打算迟点去找人开个好看点的孔,然后再在上面覆盖上一块亚克力板,估计这样就能好看点了。
回复 支持 反对

使用道具 举报

     
发表于 2020-8-4 16:54:08 | 显示全部楼层
孔开的是够丑的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-28 16:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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