写了个程序,根据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;
}
|