这几天在做一块新的PCR (荧光免疫监测法)主板,用到2个CAN,USB,PWM,UART,以及SPI,IIC,其中SPI总线是接MAX31856,做K型温度读取,头几天遇到了问题,到周五完全解决,我把整个过程记录一下。以免忘记 1. 写SPI驱动,参考了我们以前的SPI驱动,不过是基于STM32 STDLIB的,现在改为HAL LIB 有一点改变,不过还好,一天改好, 2. 第二天测试,发现读出来的温度,常温下时96度,并且手摸后,温度居然下降,奇怪,既然这样,我就要好好看看程序了,先把CR0,CR1读出来,然后通过串口打印出来。发现大部分时候都是正确的,偶尔关机,再开机,这个值就不对了,而且4个都是这样# D; l. W9 x' i9 ?- W 4 z: q% V- M: p9 Y1 _ ,这就让我为难,不可能都坏了吧,那就用逻辑分析仪看看吧,发现SPI波形很好啊,郁闷啊,说明MCU的SPI是好的啊, 3. 和公司的硬件工程师商量,请教他有没有啥好的办法。他一会让我测电压,和通断,都测试,OK, 4. 再看看程序,和以前STM32F103的读法设置一样啊,只不过以前是16位,现在改为了8位,难道这个有问题,我改为16位再试试,还是一样的情况 2 D6 f. b8 W w: V- c) t6 O) K 5. 这时候,硬件工程师给我建议,看看ready信号,用示波器看正常啊,都有,这时候时间已经过了4天,天啦,这个问题已经拖了4天,太长了, & p: T; K- A$ q0 K 6. 换max31856试试,还是一样,找一个小板子,上面有max31856.用杜邦线接到开发板上试试,发现温度读取正常,说明程序OK,把这个情况和硬件工程师说了一下,他觉得非常奇怪,让我把板子给他,+ u7 S/ A( Z P$ K% M' P 7 a- U/ y$ L+ d& @* N9 y 7. 我改为测试读CR0,CR1,他用示波器测SPI总线数据,发现写数据MOSI正常,CS,CLK都正常,MISO也正常,但为啥ready有时候正常,有时候不正常,没有办法,有换一个max31856,还是一样,这时候不敢再怀疑max31856,明明每个部分都是好的,软件,mcu,max31856,电路板都是好的,但为啥读出来的温度就是这么高呢, 8.没有办法,他到实验室去了一趟,回来把板子给我,说,再测试一下吧,不行,就再焊一块,我没有其他办法,只好再测试一次,这次OK,22.05度,好了,断电上电,测试OK,再断电上电,OK,完全好了, 9。我问他,怎么回事,他说用酒精狠狠清洗了一下。跟我说,以后千万不要用焊油这类助焊了,然后拿给我看,这种白色铁盒助焊剂。上面有一行字,说这个会导电,使用后要用酒精清洗。 - z1 H1 O& N$ y0 q' D7 T5 w9 \ 10. 整整花了5天,才解决,教训深刻,所以记录下来,程序在公司电脑里,以及一些图片都在公司,下次补上吧7 Z' t3 g- l: n# o 4 q0 E( l2 b+ Z5 t; Y |
刘氓兔的杂谈【001】-片上USB 高速PHY
【合集】STM32F7教程、资料大集合
基于STM32F746G-Discover的扩展电路板
F769 Discovery实现播放U盘音乐的播放器
STM32 VS Code Extension (在Ubuntu上开发STM32,ST官方vscode插件使用指南)
STM32F765@216MHz跑NES模拟器【代码】【视频】
基于STM32F7实现ADC软件触发+轮询采集
基于STM32F7进行ADC采集解决更新问题
基于STM32F7使用定时器经验分享
实现基于STM32F7中周期采集