Вот код. АЦП в режиме постоянного преобразования.
Код
while (GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_6)!=0){}
// SPI_I2S_SendData(SPI2, 0b01011000);
//GPIO_WriteBit(GPIOB, GPIO_Pin_12, Bit_SET);
// while (GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_8)!=0){} //проверка окончания преобразования
//GPIO_WriteBit(GPIOB, GPIO_Pin_12, Bit_RESET);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
ADCL = SPI_I2S_ReceiveData(SPI2);
// while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE)==RESET){}
//Delay(0x6ffff);
ADCM = SPI_I2S_ReceiveData(SPI2);
// while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE)==0){}
// Delay(0x6ffff);
ADCH = SPI_I2S_ReceiveData(SPI2);
// while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE)==0){}
//GPIO_WriteBit(GPIOB, GPIO_Pin_12, Bit_SET);
ADC_Data=ADCH*0x10000+ADCM*0x100+ADCL;
Ниже стандартные библиотечные функции обмена по SPI
Код
void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data)
{
/* Check the parameters */
assert_param(IS_SPI_ALL_PERIPH(SPIx));
/* Write in the DR register the data to be sent */
SPIx->DR = Data;
}
/**
* @brief Returns the most recent received data by the SPIx/I2Sx peripheral.
* @param SPIx: where x can be
* - 1, 2 or 3 in SPI mode
* - 2 or 3 in I2S mode
* @retval The value of the received data.
*/
uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx)
{
/* Check the parameters */
assert_param(IS_SPI_ALL_PERIPH(SPIx));
/* Return the data in the DR register */
return SPIx->DR;
}