18.09.2021, 20:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,715
Сказал спасибо: 130
Сказали Спасибо 1,108 раз(а) в 527 сообщении(ях)
|
STM32G431 DAC средствами HAL
Есть плата на STM32G431CBT6 ( https://aliexpress.ru/item/1005002377760498.html ).
И понадобилось мне синус с этой платы получить. В принципе ситуация стандартная: таблица синуса+таймер+DMA+DAC.
Делаю, запускаю - тишина на выходе. Легкий шум в младших разрядах цифровой осциллографической приставки.
Решил, что где-то ошибся. Решил упростить. Выкинул DMA. По таймеру просто писал DOR. На выходе - тишина.
Написал максимально примитивный код:
Инициализация (код пользователя):
PHP код:
|
/* USER CODE BEGIN 2 */
HAL_DAC_Start(&hdac1,DAC_CHANNEL_1);
/* USER CODE END 2 */
|
Основной цикл:
PHP код:
|
HAL_DAC_SetValue(&hdac1,DAC_CHANNEL_1,DAC_ALIGN_12B_R,0x00000000);
HAL_Delay(2);
HAL_DAC_SetValue(&hdac1,DAC_CHANNEL_1,DAC_ALIGN_12B_R,0x00000280);
HAL_Delay(2);
HAL_DAC_SetValue(&hdac1,DAC_CHANNEL_1,DAC_ALIGN_12B_R,0x00000500);
HAL_Delay(2);
HAL_DAC_SetValue(&hdac1,DAC_CHANNEL_1,DAC_ALIGN_12B_R,0x00000780);
HAL_Delay(2);
HAL_DAC_SetValue(&hdac1,DAC_CHANNEL_1,DAC_ALIGN_12B_R,0x00000999);
HAL_Delay(2);
HAL_DAC_SetValue(&hdac1,DAC_CHANNEL_1,DAC_ALIGN_12B_R,0x00000780);
HAL_Delay(2);
HAL_DAC_SetValue(&hdac1,DAC_CHANNEL_1,DAC_ALIGN_12B_R,0x00000500);
HAL_Delay(2);
HAL_DAC_SetValue(&hdac1,DAC_CHANNEL_1,DAC_ALIGN_12B_R,0x00000280);
HAL_Delay(2);
|
Но на выходе ничего нет.
Не могу понять причину.
Что предпринималось:
1) Попытка перейти на 2 канал DAC1. Сигнала нет.
2) Выключал выходной буфер DAC (подозрение на неисправность выходного буфера). Сигнала нет.
3) Пробовал использовать DAC3. Так как он не может вывести на внешний пин - запустил наружу через внутренний OMAP. Сигнала нет.
4) Ради интереса данный код запустил на STM32G071 - все отлично работает, сигнал есть.
5) Вывод PA4 и PA5 исправны, пайка нормальная, маркировка на контактах для подключения верная.
6) Бегло прошелся под отладчиком. Выходная нога в аналоговом режиме, порт и DAC тактируется. В основном цикле DOR записывается нормально. Но на выходе реакции нет. Почему так?
Почему все прекрасно работает на STM32G071 и не работает на STM32G431? Там что-то добавили или изменили?
У кого есть опыт использования DAC на STM32G431? Почему он не работает? Есть какой-то нюанс в НАЛ, о котором я забыл?
Или чип с неисправными DAC?
|
|
|
|
18.09.2021, 21:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,630
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: STM32G431 DAC средствами HAL
А если выкинуть КАЛ и сделать нормально?
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
18.09.2021, 21:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,715
Сказал спасибо: 130
Сказали Спасибо 1,108 раз(а) в 527 сообщении(ях)
|
Re: STM32G431 DAC средствами HAL
А "нормально" - это как? LL или бито-писанием?
Сейчас пробую на LL переписать. Посмотрим, что будет на выходе.
|
|
|
|
18.09.2021, 21:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,630
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: STM32G431 DAC средствами HAL
Сообщение от DanilinSA
|
А "нормально" - это как?
|
На гольном CMSIS, естественно. Больше никак.
Я вот, кстати, не так давно с новым для себя STM32F303 ковырялся. Взял сниппеты (от ST, кстати) под F0, ЦАП у меня сразу же заработал. Дальше - просто почитать внимательно документацию, да подправить код под свою задачу.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
18.09.2021, 22:49
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 714
Сказал спасибо: 363
Сказали Спасибо 797 раз(а) в 371 сообщении(ях)
|
Re: STM32G431 DAC средствами HAL
Сообщение от DanilinSA
|
Инициализация (код пользователя):
|
А сама-то инициализация не показана, только старт.
Что-то таится в загадочном hdac1, ИМХО.
|
|
|
|
18.09.2021, 23:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,715
Сказал спасибо: 130
Сказали Спасибо 1,108 раз(а) в 527 сообщении(ях)
|
Re: STM32G431 DAC средствами HAL
Цитата:
|
А сама-то инициализация не показана, только старт.
|
Там все стандартно:
Цитата:
|
static void MX_DAC1_Init(void)
{
DAC_ChannelConfTypeDef sConfig = {0};
/** DAC Initialization
*/
hdac1.Instance = DAC1;
if (HAL_DAC_Init(&hdac1) != HAL_OK)
{
Error_Handler();
}
/** DAC channel OUT1 config
*/
sConfig.DAC_HighFrequency = DAC_HIGH_FREQUENCY_INTERFACE_MODE_AUTOMATIC;
sConfig.DAC_DMADoubleDataMode = DISABLE;
sConfig.DAC_SignedFormat = DISABLE;
sConfig.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_DISABLE;
sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
sConfig.DAC_Trigger2 = DAC_TRIGGER_NONE;
sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
sConfig.DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_EXTERNAL;
sConfig.DAC_UserTrimming = DAC_TRIMMING_FACTORY;
if (HAL_DAC_ConfigChannel(&hdac1, &sConfig, DAC_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
}
|
Тактирование порта и DAC включено. Прошелся по битам в регистрах - инициализация DAC вроде прошла штатно. Выход (судя по битам в регистрах) коммутирован верно. Биты сброса сброшены. Вроде все есть для нормальной работы - а выхода нет.
Может чип из отбраковки? С нерабочими ADC?
|
|
|
|
19.09.2021, 00:34
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 714
Сказал спасибо: 363
Сказали Спасибо 797 раз(а) в 371 сообщении(ях)
|
Re: STM32G431 DAC средствами HAL
DanilinSA, извиняюсь, проверить-то оказалось не на чем..
Думал же в своё время поиграться с G431, но прошляпил - так и не заказал.
На макетке оказался распаян G071K8
|
|
|
|
19.09.2021, 10:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,715
Сказал спасибо: 130
Сказали Спасибо 1,108 раз(а) в 527 сообщении(ях)
|
На G071RB все завелось сразу и без проблем.
По некоторым косвенным признакам у кристалла что-то не то с коммутацией выходов DAC. Сами DAC живые, тактирование есть, регистры в наличии и пишутся нормально. По даташиту нужно сконфигурировать выход DAC на внешние выходы и переключить выводы на аналоговый режим. Вчера прошелся внимательно по регистрам DAC. Все сконфигурировано вроде нормально.
Заказал платку с Али ( https://aliexpress.ru/item/1005001465029218.html ). Как придет - проверю и отпишусь. А старую плату - под задачи без DAC.
Пришла заказанная плата. При подаче питания моргает светодиодом. Типа "камень живой".
Пытаюсь прошить через STLink - не хочет. Начинаю разбираться - кристалл имеет ID = 0000
Вообще сейчас невозможно нормальные чипы по приемлемой цене купить?!
P.S.: Попробую прошить через USART и другие интерфейсы. Камень походу вообще не проходил стадию тестирования.
P.P.S.: А значение DevID вообще изменить можно?
Последний раз редактировалось mike-y-k; 05.10.2021 в 10:24.
|
|
|
|
04.10.2021, 21:13
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 714
Сказал спасибо: 363
Сказали Спасибо 797 раз(а) в 371 сообщении(ях)
|
Re: STM32G431 DAC средствами HAL
Сообщение от DanilinSA
|
А значение DevID вообще изменить можно?
|
Если речь о MCU device ID code, то пишут, что:
" DBGMCU_IDCODE
Address: 0xE004 2000
Only 32-bits access supported. Read-only"
(С) RM0440, раздел 47.6.1
Если же речь о Unique device ID register (96 bits), то пишут, якобы:
"The 96-bit unique device identifier provides a reference number which is unique for any device and in any context. These bits cannot be altered by the user.
Base address: 0x1FFF 7590
Address offset: 0x00
Read only = 0xXXXX XXXX where X is factory-programmed"
(С) Там же, раздел 48.1
Вывод: изменить нельзя.
P.S.
Кинул беглый взгляд в ближайший инет-магазин в зоне трёхдневной доставки по Украине. Если по одной штучке, то:
STM32G431C6T6 - $11, корпус LQFP32
STM32G431C8T6 - $11, корпус LQFP48
STM32G431CBT6 - $38, корпус LQFP48; а в корпусе UFQFPN-48 - пара штук по $4 (!).
Т. е. кое-где мизерные остатки еще есть
Р.P.S.
На харьковском Космодроме ̶A̶T̶T̶i̶n̶y̶2̶3̶1̶3̶A̶ STM32F030F4 подешевели с $8.5 до $3.6
Да - подразумеваю не производство, а разовые поделки.
Последний раз редактировалось j-Roger; 04.10.2021 в 21:51.
|
|
|
|
05.10.2021, 09:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,715
Сказал спасибо: 130
Сказали Спасибо 1,108 раз(а) в 527 сообщении(ях)
|
По видимому прописывается спец.утилитой по результатам тестирования кристалла. А этот кристалл тестирования предположительно не проходил.
Еще прикол с этим чипом:
Если чип не хочет через SWD шиться - я не гордый. Я и через USART могу прошить. Распаял гребеночку - зацепился.
Загрузчик USART выдал ChipID = 0x479 ! Стабильно, с 100% воспроизводимостью. Забавно, но в линейке ST нет чипов с таким ChipID.
Либо чип сильно больной на голову, либо в мусор ушло что-то экспериментальное.
Последний раз редактировалось mike-y-k; 13.10.2021 в 11:28.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:39.
|
|