Easyelectronics.ru

Электроника для всех
Текущее время: 20 июл 2018, 04:21

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: STM32L4 и странное поведение GPIO
СообщениеДобавлено: 29 июн 2018, 16:28 
Старожил
Аватара пользователя

Зарегистрирован: 01 авг 2016, 10:47
Сообщения: 222
Откуда: Таганрог
Доброго дня всем!

Попалась странная ситуация, объяснение которой пока не найдено. Возможно, кто-то сталкивался с таким.

Действующие лица: STM32L471 / STM32L476
Далее запускаем тест, заключающийся в выборе системной тактовой частоты и настройки GPIO в качестве альтернативной функции таймера. Код выглядит так:

Код:
SystemInit();
SystemCoreClockUpdate();

RCC->AHB2ENR = (RCC->AHB2ENR &(~RCC_AHB2ENR_GPIOCEN)) | RCC_AHB2ENR_GPIOCEN;

GPIOC->MODER = (GPIOC->MODER & ~(GPIO_MODER_MODE8)) | GPIO_MODER_MODE8_1;
GPIOC->OSPEEDR = (GPIOC->OSPEEDR &~(GPIO_OSPEEDER_OSPEEDR8)) | GPIO_OSPEEDER_OSPEEDR8_1;
GPIOC->AFR[1] = (2<<GPIO_AFRH_AFSEL8_Pos);


Что замечено: после выполнения строки
Код:
GPIOC->MODER = (GPIOC->MODER & ~(GPIO_MODER_MODE8)) | GPIO_MODER_MODE8_1;
на ножке pc8 имеем сигнал прямоугольной формы системной частоты (при работе от MSI частота была в районе 4МГц, при работе от ФАПЧ 40МГц, все как настроено).
Данный сигнал пропадает после строки:
Код:
GPIOC->AFR[1] = (2<<GPIO_AFRH_AFSEL8_Pos);


Что это и от чего это не понятно ... AF0 для данного GPIO нет. Я бы понял, если это была бы ножка pa8 у которой функция MCO по дефолту ...

Пока в качестве решения был изменен порядок настройки на такой:
Код:
GPIOC->AFR[1] = (2<<GPIO_AFRH_AFSEL8_Pos);
GPIOC->OSPEEDR = (GPIOC->OSPEEDR &~(GPIO_OSPEEDER_OSPEEDR8)) | GPIO_OSPEEDER_OSPEEDR8_1;
GPIOC->MODER = (GPIOC->MODER & ~(GPIO_MODER_MODE8)) | GPIO_MODER_MODE8_1;


не понятно что это, от чего это и почему не описано не в РМ, не в эрате ..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32L4 и странное поведение GPIO
СообщениеДобавлено: 29 июн 2018, 16:40 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 3426
Откуда: Кемеровская область, Киселевск
Прикреплять значение регистров надо

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32L4 и странное поведение GPIO
СообщениеДобавлено: 29 июн 2018, 16:56 
Старожил
Аватара пользователя

Зарегистрирован: 01 авг 2016, 10:47
Сообщения: 222
Откуда: Таганрог
Oxford писал(а):
Прикреплять значение регистров надо


каких именно?

если интересует содержимое изменяемых регистров, то там все ожидаемо.
до модификации:
GPIOC->MODER 0xFFFF FFFF;
GPIOC->AFR[1] 0x0000 0000

после модификации:
GPIOC->MODER 0xFFFE FFFF;
GPIOC->AFR[1] 0x0000 0002

то есть поведение вполне ожидаемое.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32L4 и странное поведение GPIO
СообщениеДобавлено: 29 июн 2018, 19:31 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1951
1. Для RCC не надо делать таких сложных конструкций. Там лишь ОДИН бит. Вы его либо сбрасываете по &, либо устанавливаете по |. Другого не дано.
2. Случаем, PC8 и PA8 не перепутали? Они рядом, через один. Замыканий или утечек нет ли?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32L4 и странное поведение GPIO
СообщениеДобавлено: 29 июн 2018, 19:57 
Старожил
Аватара пользователя

Зарегистрирован: 17 дек 2014, 23:08
Сообщения: 585
Откуда: Nowhere
Тоже как-то заметил такую фигню: если в GPIOC_MODER записать значение AF для 8-го пина при значении 0000(AF0) в AFRH регистре, на пине PC8 идет меандр. Сначала решил, что оно коротнулось с PA8 (этот пин через один от PC8 торчит). Запустил на nucleo - аналогично.
Если не изменяет память, частота меандра на пине была равна частоте MSI. Плюс установкой предделителя для AHB можно менять "скважность": для /4 будет 25% high и 75% low.
Что это за фигня такая, так и не нашел, решил "проблему" точно так же - записю в AFR до переключения пина в AF.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32L4 и странное поведение GPIO
СообщениеДобавлено: 29 июн 2018, 20:35 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1951
Действительно! раньше этого не замечал. Сейчас проверил - да, странным образом на PC8 выводится MCO, причем, биты в регистре RCC->CFGR не влияют. Объяснения этому пока не нашел. В эррате тоже не нашел.

Я в коде вообще то стараюсь сначала выполнять запись AFR, и лишь потом включать AF в MODER. Потому что если делать наоборот, то первым включится AF0.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32L4 и странное поведение GPIO
СообщениеДобавлено: 30 июн 2018, 14:41 
Старожил
Аватара пользователя

Зарегистрирован: 01 авг 2016, 10:47
Сообщения: 222
Откуда: Таганрог
вот и я ж про то ... Коллега по работе обратил внимания, пока вспоминал как работать с МК.

получает неописанная "фича" или все таки баг?

интересно будет на других сериях глянуть что и как. будет время, посмотрю на L053, F429, F415, L4A5.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB