Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

STM32G431 DAC средствами HAL

Непрочитано 18.09.2021, 20:34  
DanilinSA
Почётный гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,801
Сказал спасибо: 133
Сказали Спасибо 1,152 раз(а) в 549 сообщении(ях)
DanilinSA на пути к лучшему
По умолчанию 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?
Реклама:
DanilinSA вне форума  
Непрочитано 18.09.2021, 21:01  
eddy
Почётный гражданин KAZUS.RUN
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: STM32G431 DAC средствами HAL

А если выкинуть КАЛ и сделать нормально?
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
eddy вне форума  
Непрочитано 18.09.2021, 21:31  
DanilinSA
Почётный гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,801
Сказал спасибо: 133
Сказали Спасибо 1,152 раз(а) в 549 сообщении(ях)
DanilinSA на пути к лучшему
По умолчанию Re: STM32G431 DAC средствами HAL

А "нормально" - это как? LL или бито-писанием?

Сейчас пробую на LL переписать. Посмотрим, что будет на выходе.
DanilinSA вне форума  
Непрочитано 18.09.2021, 21:56  
eddy
Почётный гражданин KAZUS.RUN
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: STM32G431 DAC средствами HAL

Сообщение от DanilinSA Посмотреть сообщение
А "нормально" - это как?
На гольном CMSIS, естественно. Больше никак.
Я вот, кстати, не так давно с новым для себя STM32F303 ковырялся. Взял сниппеты (от ST, кстати) под F0, ЦАП у меня сразу же заработал. Дальше - просто почитать внимательно документацию, да подправить код под свою задачу.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
eddy вне форума  
Непрочитано 18.09.2021, 22:49  
j-Roger
Гражданин KAZUS.RUN
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 839
Сказал спасибо: 379
Сказали Спасибо 942 раз(а) в 451 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию Re: STM32G431 DAC средствами HAL

Сообщение от DanilinSA Посмотреть сообщение
Инициализация (код пользователя):
А сама-то инициализация не показана, только старт.
Что-то таится в загадочном hdac1, ИМХО.
j-Roger вне форума  
Непрочитано 18.09.2021, 23:11  
DanilinSA
Почётный гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,801
Сказал спасибо: 133
Сказали Спасибо 1,152 раз(а) в 549 сообщении(ях)
DanilinSA на пути к лучшему
По умолчанию 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?
DanilinSA вне форума  
Непрочитано 19.09.2021, 00:34  
j-Roger
Гражданин KAZUS.RUN
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 839
Сказал спасибо: 379
Сказали Спасибо 942 раз(а) в 451 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию Re: STM32G431 DAC средствами HAL

DanilinSA, извиняюсь, проверить-то оказалось не на чем..
Думал же в своё время поиграться с G431, но прошляпил - так и не заказал.
На макетке оказался распаян G071K8
j-Roger вне форума  
Непрочитано 19.09.2021, 10:45  
DanilinSA
Почётный гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,801
Сказал спасибо: 133
Сказали Спасибо 1,152 раз(а) в 549 сообщении(ях)
DanilinSA на пути к лучшему
По умолчанию

На G071RB все завелось сразу и без проблем.
По некоторым косвенным признакам у кристалла что-то не то с коммутацией выходов DAC. Сами DAC живые, тактирование есть, регистры в наличии и пишутся нормально. По даташиту нужно сконфигурировать выход DAC на внешние выходы и переключить выводы на аналоговый режим. Вчера прошелся внимательно по регистрам DAC. Все сконфигурировано вроде нормально.

Заказал платку с Али ( https://aliexpress.ru/item/1005001465029218.html ). Как придет - проверю и отпишусь. А старую плату - под задачи без DAC.

Пришла заказанная плата. При подаче питания моргает светодиодом. Типа "камень живой".
Пытаюсь прошить через STLink - не хочет. Начинаю разбираться - кристалл имеет ID = 0000

Вообще сейчас невозможно нормальные чипы по приемлемой цене купить?!

P.S.: Попробую прошить через USART и другие интерфейсы. Камень походу вообще не проходил стадию тестирования.
P.P.S.: А значение DevID вообще изменить можно?
Миниатюры:
Нажмите на изображение для увеличения
Название: G431.png
Просмотров: 0
Размер:	20.5 Кб
ID:	166764  

Последний раз редактировалось mike-y-k; 05.10.2021 в 10:24.
DanilinSA вне форума  
Непрочитано 04.10.2021, 21:13  
j-Roger
Гражданин KAZUS.RUN
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 839
Сказал спасибо: 379
Сказали Спасибо 942 раз(а) в 451 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию 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.
j-Roger вне форума  
Непрочитано 05.10.2021, 09:45  
DanilinSA
Почётный гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,801
Сказал спасибо: 133
Сказали Спасибо 1,152 раз(а) в 549 сообщении(ях)
DanilinSA на пути к лучшему
По умолчанию

По видимому прописывается спец.утилитой по результатам тестирования кристалла. А этот кристалл тестирования предположительно не проходил.

Еще прикол с этим чипом:
Если чип не хочет через SWD шиться - я не гордый. Я и через USART могу прошить. Распаял гребеночку - зацепился.

Загрузчик USART выдал ChipID = 0x479 ! Стабильно, с 100% воспроизводимостью. Забавно, но в линейке ST нет чипов с таким ChipID.

Либо чип сильно больной на голову, либо в мусор ушло что-то экспериментальное.
Миниатюры:
Нажмите на изображение для увеличения
Название: G431_1.png
Просмотров: 0
Размер:	54.2 Кб
ID:	166965  

Последний раз редактировалось mike-y-k; 13.10.2021 в 11:28.
DanilinSA вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PIC12F1840 Использование хардварного UART совместно с DAC kib12 Proteus 14 14.12.2019 11:48
PIC12F1840 Использование UART совместно с DAC kib12 PIC 2 11.12.2019 03:00
FiiO D3 Внешний DAC для компъютера avt798579 Аудиотехника 70 20.02.2017 12:08
Как защитить выход DAC DanilinSA ARM 6 15.03.2016 20:58
STM32, DAC + RESET Nik_UFO Микроконтроллеры, АЦП, память и т.д 4 18.05.2012 19:35


Часовой пояс GMT +4, время: 23:40.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.