Actualmente estoy trabajando en un proyecto en el que estoy intentando conectar un potenciómetro digital MCP4151 con el STM32F4-Discovery Board utilizando el IDE de Eclipse de Marte. He descargado e incluido el STM32F4xx HAL pero estoy luchando para obtener todos los pines y la configuración correcta.
De la hoja de datos del STM32F407 (página 49) pude deducir que quiero usar PA5 y PA7 como pines para SPI_SCK y SPI_MOSI. Así que modifiqué el código de este proyecto para habilitar estos pines:
void SPI_Init(){
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
HAL_SPI_Init(&hspi1);
/* Peripheral clock enable */
__SPI1_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct;
/**SPI1 GPIO Configuration
PA5 ------> SPI1_SCK
PA7 ------> SPI1_MOSI
*/
GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_0; //Chip Select
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
__HAL_SPI_ENABLE(&hspi1);
}
Con eso trato de inicializar los valores en el potenciómetro usando:
void SPI_SendData(uint8_t* adress, uint8_t* data, uint16_t size, uint32_t timeout){
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);
HAL_SPI_Transmit(&hspi1, adress, size, timeout);
while(HAL_SPI_GetState(&hspi1) == HAL_SPI_STATE_BUSY);
HAL_SPI_Transmit(&hspi1, data, size, timeout);
while(HAL_SPI_GetState(&hspi1) == HAL_SPI_STATE_BUSY);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET);
}
Y luego escribe:
void POT_Init(){
uint8_t data = 0x00;
SPI_SendData(&STATUS_REGISTER_ADDRESS, &data, 8, 100); //Set SREG bit 1 to 0. Device is NOT in shutdown.
data = 0x0F;
SPI_SendData(&TCON_BIT_REGISTER_ADDRESS, &data, 8, 100); //Connect Wiper 0
data = 0x08;
SPI_SendData(&WIPER_0_REGISTER_ADDRESS, &data, 8, 100);
}
El problema es que estoy probando SCK y SDI / PA5 y PA7 y no veo nada que se mueva a través de la línea. Los dos dispositivos están conectados de la siguiente manera:
Entonces, ¿por qué no estoy viendo nada? Supongo que falta algo en mi función de inicio, pero no puedo identificarlo y apreciaría una segunda mirada.