本帖最后由 any_014 于 2015-8-18 17:00 编辑 用IO口模拟SPI,用的PB4做的MISO脚。 读取数据时出错,总是接收不到数据,后来用示波器测量了下IO口,有高低电平。 于是用以下部分测试,如果PB4是0的话,spi_misoValue加一,然后用串口将spi_misoValue发上来。 结果判断PB4是0的话,spi_misoValue没执行这段自加12次; 如果判断PB4是1的话,spi_misoValue始终没有自加。 好象是时序出了问题?没有在正确的时间端判断PB4?
----------------------------------2015.08.18---------------------------------------- 上传下现在的程序,希望有空闲的朋友帮我看下。 工程是以野火历程的模板建的,我水平有限,写的有点混乱,见笑。 |
spi_misoValue |= (0x0001<<i);
spi_misoValue |= (0x0001<<i); 这句话已屏蔽。
PB4脚上有连续的高低电平,按说应该是不断的自增。
spi_misoValue++;
确认是这句话有问题,如果判断是否是0,则条件成立。
如果改成判断是否是1,则只加一次...
今天比较晚了,下班,明天再试。
就是不能读取高电平成功。
修改了下程序,在SPI读数的时候,如果读的是高电平就让LED1取反,如果读的是低电平,就让LED2取反。
结果发现LED2不停的闪烁,LED1无变化。感觉就像是读错了管脚,该管脚一直是低电平似的。可是我实际读的是PB4,PCB板上量的也是90管脚(100脚封装),有明显波形。查了下手册,90脚确实是PB4.也怀疑过PB4管脚损坏,于是编写了个程序,根据PB4的管脚点高低,控制LED灯的亮灭。没问题。
程序已上传,在一口,能抽空帮我看下吗?
自己感觉是没问题的,也许是自己检查不出来...
PB4默认是JTAG口需要重映射。
谢谢回复,查了下,确实是默认JATG模式。
然后就修改了下,但还是没什么用。
还要开启在Debug模式时,使能相应IO口,DBGMCU->CR &= ~0x00000020;