Доброго времени суток
Работая USART используя DMA. Обычно использую контроллер STM32F103C8T6.
И вот решил для небольшого проекта использовать STM32F030C8T6
В части необходимой периферии в нем всего хватает, но выяснилось что CubeMX по разному в проекте генерирует обработчики прерываний DMA.
Если проект генерируется для STM32F103, то в фале stm32f1xx_it.c генерируется два обработчика. Отдельный обработчик для каждого канала DMA
Код:
void DMA1_Channel6_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Channel6_IRQn 0 */
/* USER CODE END DMA1_Channel6_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_usart2_rx);
/* USER CODE BEGIN DMA1_Channel6_IRQn 1 */
/* USER CODE END DMA1_Channel6_IRQn 1 */
}
/**
* @brief This function handles DMA1 channel7 global interrupt.
*/
void DMA1_Channel7_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Channel7_IRQn 0 */
/* USER CODE END DMA1_Channel7_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_usart2_tx);
/* USER CODE BEGIN DMA1_Channel7_IRQn 1 */
/* USER CODE END DMA1_Channel7_IRQn 1 */
}
а если проект генерировать для STM32F030 то создается один обработчик для обоих прерываний
Код:
/**
* @brief This function handles DMA1 channel 4 and 5 interrupts.
*/
void DMA1_Channel4_5_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Channel4_5_IRQn 0 */
/* USER CODE END DMA1_Channel4_5_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_usart2_tx);
HAL_DMA_IRQHandler(&hdma_usart2_rx);
/* USER CODE BEGIN DMA1_Channel4_5_IRQn 1 */
/* USER CODE END DMA1_Channel4_5_IRQn 1 */
}
Это какая то особенность STM32F030? И как в обработчике понять по какому каналу произошло прерывание?
Добавлено after 11 minutes 43 seconds:Немного поковырялся в проектах, нашел два файла
startup_stm32F103c8tx.s и startup_stm32f030c8tx.s
Похоже это файл с векторами прерываний, где заданы адреса callback функций и в одном случае два слова под адреса в другом одно.
Похоже что контроллеры прерываний разные.....
А как тогда понять по какому событию произошло прерывание?