CubeMX - I2C DMA - требуется помощь - ST32F1
HAL_I2C_Mem_Write_DMA / HAL_I2C_Mem_Read_DMA в чем проблема?
Привет я пытаюсь запустить I2C в режиме DMA с LIS35 (акселерометр). Я написал простой код, как показано ниже, но каждый раз, когда я пытаюсь запустить или отладить его, я получаю обратно return "LIS35_ERROR;" Это означает, что функция LIS35_I2C_Init(void) работает неправильно.
Ранее (я имею в виду вчера) я написал два аналогичных проекта:
Первый был основан на функциях HAL_I2C_Mem_Write / HAL_I2C_Mem_Read - и все работает правильно (возврат LIS35_OK;)
Второй был основан на функциях HAL_I2C_Mem_Write_IT / HAL_I2C_Mem_Read_IT - и все работает правильно (возврат LIS35_OK;)
Среда:
- STM32CubeMX - обновлено сегодня,
- Плата - Nucleo-F103RB
- Проект CubeMX добавлен в качестве вложения
- Конфигурация I2C al на картинках ниже
/* USER CODE BEGIN 4 */
char LIS35_I2C_Init(void)
{
uint8_t Sett_Lis35_cr2_boot = LIS35_REG_CR2_BOOT;
uint8_t RegVal, LIS35Settings;
HAL_StatusTypeDef state1, state2, state3;
volatile long int i;
//reset LIS35 settings
if(HAL_I2C_Mem_Write_DMA(&hi2c2, LIS35_Addr, LIS35_REG_CR2, 1, &Sett_Lis35_cr2_boot, 1) != HAL_OK) {
//led blink info
}
while (HAL_I2C_GetState(&hi2c2) != HAL_I2C_STATE_READY){}
//Write settings - activate all axis
LIS35Settings = LIS35_REG_CR1_XEN | LIS35_REG_CR1_YEN | LIS35_REG_CR1_ZEN | LIS35_REG_CR1_ACTIVE;
//WRITE CONFIGURATION TO LIS35 CHIP
if(HAL_I2C_Mem_Write_DMA(&hi2c2, LIS35_Addr, LIS35_REG_CR1, 1, &LIS35Settings, 1)!= HAL_OK) {
//led blink info
}
while (HAL_I2C_GetState(&hi2c2) != HAL_I2C_STATE_READY){}
//Read configuration - if OK, LIS35 is up and running
if(HAL_I2C_Mem_Read_DMA(&hi2c2, LIS35_Addr, LIS35_REG_CR1, 1, &RegVal, 1) != HAL_OK) {
//led blink info
}
while (HAL_I2C_GetState(&hi2c2) != HAL_I2C_STATE_READY){}
if (RegVal == LIS35Settings){
HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET);
return LIS35_OK;
}
return LIS35_ERROR;
}
void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c){
static uint8_t cntTx;
cntTx++;
}
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c){
static uint8_t cntRx;
cntRx++;
}
/* USER CODE END 4 */
Заранее благодарю за любую помощь:-)
Farnk