Доброго времени суток!
Недавно была предпринята попытка разобраться с STM32L071 при поддержке STM32CubeIDE.
Скрины генерации проекта прилагаю. Решено было начать с самого базового - с UART. Для теста в UART была выдана строка, которая была принята компьютером. После чего я настраиваю прием данных по UART, зная максимальный объём посылки - включаю прерывание IDLE и запускаю приём. Несмотря на очевидное наличие данных на входе контроллера (видимое с помощью осциллографа), я не получаю признак их прихода, т.е. ни прерывание IDLE, ни коллбек.
В чем может быть причина?
//main.c
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
if (huart->Instance == USART1)
{
}
}
int main (void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
uint8_t aTxBuffer[] = " ****UART_TwoBoards_ComIT**** ";
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init()
HAL_UART_Transmit(&huart1, (uint8_t*)aTxBuffer, sizeof(aTxBuffer), 1000);
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
HAL_UARTEx_ReceiveToIdle_IT(&huart1, (uint8_t*)receive_buff, 20);
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
}
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE) == SET)
{
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
HAL_UARTEx_ReceiveToIdle_IT(&huart1, (uint8_t*)receive_buff, 20);
}
/* USER CODE END USART1_IRQn 1 */
}