ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
18 июля
609623 Топик полностью
Dingo (16.07.2015 10:58 - 11:01, просмотров: 85) ответил fk0 на В SPI данные изменяются в середине клока. С нуля на нуль. Всё корректно.
Есть версии, почему STM32F407 может GPIO дёргать так (по времени)? Надо прочитать 3 байта, CS в это время дёргать нельзя, его формирую дрыгногой. Запускаю, жду флага "принят байт", забираю первый, второй, третий, потом снимаю CS. На осциллограмме он последние 7 бит забирает уже без CS (внизу сигнал тактирования), соответственно - там мусор. Могу дизассемблер закинуть с окна отладчика. SPI_NSSInternalSoftwareConfig( AD7767_SPIIF, SPI_NSSInternalSoft_Set); /* select internal CS (NSS) */ AD7767_RX_ON(); /* start receiver */ AD7767_SELECT(); /* select pin == макрос GPIO_WriteBit ==*/ while ( count-- != 0) { while ( (AD7767_SPIIF->SR & SPI_I2S_FLAG_RXNE) == 0 ) ; /* wait RX Not Empty flag */ tmp = SPI_I2S_ReceiveData( AD7767_SPIIF) << 16; while ( (AD7767_SPIIF->SR & SPI_I2S_FLAG_RXNE) == 0 ) ; /* wait RX Not Empty flag */ tmp |= SPI_I2S_ReceiveData( AD7767_SPIIF) << 8; while ( (AD7767_SPIIF->SR & SPI_I2S_FLAG_RXNE) == 0 ) ; /* wait RX Not Empty flag */ tmp |= SPI_I2S_ReceiveData( AD7767_SPIIF) << 0; *dout = tmp; dout++; } AD7767_RX_OFF(); /* stop receive */ SPI_NSSInternalSoftwareConfig( AD7767_SPIIF, SPI_NSSInternalSoft_Reset); /* don't select internal CS (NSS) */ AD7767_NOSELECT(); /* don't select pin */
image