写了个程序,根据PB4口电平高低控制LED灯亮灭,没问题,排除PB4口损坏的可能。
又修改现在的程序,判断PB4电压高低,如果是高,则让LED1取反,如果是低,则让LED2取反。
结果LED2不停的闪,LED1无反应(常亮).
用示波器测量LED2波形,发现是经过一段低电平后,有8组脉冲,这8组脉冲应该是读SPI_MISO信号时的16次循环引起的。
感觉还是不能读取到高电平,好像程序里读的管脚和PCB管脚不一致。可查了手册及PCB,是一致的,是PB4.
- u16 ReadFromADT7310ViaSPI(u8 reg_address)
- {
- u8 i;
- u8 spi_Value;
-
- spi_Value = (0x78 & ((reg_address + 8) << 3));
- ADT7310_CS(1);
- SPI_SCL(1);
- ADT7310_CS(0);
- ADT7310Delay(5);
-
- for(i = 0; i < 8; i++)
- {
- SPI_SCL(0);
- if((spi_Value & 0x80) == 0x80)
- SPI_MOSI(1);
- else
- SPI_MOSI(0);
- ADT7310Delay(5);
- SPI_SCL(1);
- spi_Value = (spi_Value << 1);
- ADT7310Delay(5);
- }
- for(i = 0; i < 16; i++)
- {
- SPI_SCL(0);
- spi_misoValue = (spi_misoValue << 1);
- ADT7310Delay(10);
- if(GPIO_ReadInputDataBit(GPIOB, 4) == 1)
- GPIOA->ODR ^= GPIO_Pin_1;
- else
- GPIOA->ODR ^= GPIO_Pin_2;
- // spi_misoValue |= 0x0001;
- // else
- // spi_misoValue &= 0xfffe;
- ADT7310Delay(2);
- SPI_SCL(1);
- ADT7310Delay(8);
- }
- SPI_SCL(1);
- ADT7310_CS(1);
- GPIOA->ODR ^= GPIO_Pin_0;
- return spi_misoValue;
- }
|