| Форум РадиоКот https://radiokot.ru/forum/ |
|
| STM32F103 и STM32F030 разница в обработке прерываний DMA https://radiokot.ru/forum/viewtopic.php?f=59&t=191828 |
Страница 1 из 1 |
| Автор: | Foxhound [ Ср янв 17, 2024 18:14:48 ] |
| Заголовок сообщения: | STM32F103 и STM32F030 разница в обработке прерываний DMA |
Доброго времени суток Работая 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 функций и в одном случае два слова под адреса в другом одно. Похоже что контроллеры прерываний разные..... А как тогда понять по какому событию произошло прерывание? |
|
| Автор: | bob1 [ Ср янв 17, 2024 18:57:50 ] |
| Заголовок сообщения: | Re: STM32F103 и STM32F030 разница в обработке прерываний DMA |
А как тогда понять по какому событию произошло прерывание? Флаги посмотреть HAL_DMA_IRQHandler(&hdma_usart2_tx); //Проверить статус. hdma_usart2_tx.State измениться с HAL_DMA_STATE_BUSY (0x02) на HAL_DMA_STATE_READY(0x01), если здесь сработало; HAL_DMA_IRQHandler(&hdma_usart2_rx); //Проверить статус. hdma_usart2_rx.State измениться с HAL_DMA_STATE_BUSY (0x02) на HAL_DMA_STATE_READY(0x01), если здесь сработало; |
|
| Автор: | Foxhound [ Ср янв 17, 2024 22:33:46 ] |
| Заголовок сообщения: | Re: STM32F103 и STM32F030 разница в обработке прерываний DMA |
Цитата: Флаги посмотреть Идея понятна, спасибо. Буду пробовать |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


