Top.Mail.Ru
Уведомления
Очистить все

[Решено] Совместная работа АЦП и таймера по прерываниям

(@uhbif79)
New member

Всем привет, есть такая задача. Хочу сделать вольтамперметр на STM32. В качестве индикатора хочу использовать два 3 позиционных семисегментных индикатора. Возникла следующая проблема, не получается совместная работа таймера Tim1 c АЦП, понимаю что проблема в настройке контроллера вектора прерываний, но сам разобраться с этим не могу, может у кого то была подобная проблема. Таймер нужен для динамического вывода полученных значений, получается  так что как только включается таймер, ацп тормозится и все. При чем есть проект вольтамперметра без таймера, где значения выводятся на OLED - дисплей и там все нормально работает.

Цитата
Создатель темы Размещено : 25.08.2023 09:28
(@uhbif79)
New member

В общем я разобрался, дело было в последовательности инициализации, вначале надо инициализировать DMA, потом АЦП, то есть 

MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
MX_TIM1_Init(); так работает,

MX_GPIO_Init();
MX_ADC1_Init();

MX_DMA_Init();
MX_TIM1_Init(); так не  работает, хотя куб делает именно второй вариант. Может кому то будет полезна данная информация.

 

 

ОтветитьЦитата
Создатель темы Размещено : 25.08.2023 14:22
(@eduard)
Level 5 Moderator
От: @uhbif79

так не  работает, хотя куб делает именно второй вариант. Может кому то будет полезна данная информация.

Этот глюк у ST описан. Что бы этого не происходило, нужно в CubeMX включать DMA, а потом устройство, которое будет с ним работать. Если не получается, генерить так, а потом переставлять строки.

Но при каждой перегенерации Куб снова поменяет строки местами.

И не всегда код сгенерённый Кубом, при использовании DMA будет работать. Придётся ручками работать с регистрами.

ОтветитьЦитата
Размещено : 25.08.2023 20:19
Aveal
(@aveal)
Top level Admin

@uhbif79 Интересно, а можете проект выложить с проблемой, там где ацп перестает работать после включения таймера?

ОтветитьЦитата
Размещено : 25.08.2023 20:20
Aveal
(@aveal)
Top level Admin

Может версия старая? У меня генерирует:

/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
MX_USART1_UART_Init();
MX_USART2_UART_Init();
MX_USART3_UART_Init();
MX_IWDG_Init();
/* USER CODE BEGIN 2 */
ОтветитьЦитата
Размещено : 25.08.2023 20:31
(@uhbif79)
New member

@aveal если быть точным ацп как раз работает, по крайней мере прерывания вызываются, не работало DMA. Версия программы CubeIde 1.6.1 думаю не самая последняя. Но в общем то проблема я понял в чем была, руками можно поправить и все.

ОтветитьЦитата
Создатель темы Размещено : 28.08.2023 08:05
(@eduard)
Level 5 Moderator
От: @uhbif79

Версия программы CubeIde 1.6.1

Уже давно есть CubeIDE 1.13.1

ОтветитьЦитата
Размещено : 28.08.2023 21:11
Поделиться: