Электронщик Опубликовано 21 сентября, 2018 Поделиться Опубликовано 21 сентября, 2018 Цитата Цитата Все обозначения типа OSPEEDER, прописываются не в мануале, а в подключаемых файлах типа stm32f4x_gpio.h. Если хитите их использовать, подключите их в свой проект. Так это ж тоже что куб прописывает, а если без библиотек Цитата Я сейчас, конечно, получу ведро слюны в свой адрес, но посмотри что генерирует Куб для твоего случая Та с кубом все просто. Может и придется смотреть что оно там генерирует по регистрам в stm32f4x_gpio.h Думал может кто сталкивался. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
snn_krs Опубликовано 21 сентября, 2018 Поделиться Опубликовано 21 сентября, 2018 3 hours ago, Электронщик said: а если без библиотек Тогда самостоятельно пишем, чтото типа #define GPIO_AF_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ #define GPIO_AF_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ #define GPIO_AF_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ Это из Кейла. Таких строк прийдется писать очень много. Подключая файлы *.h вы не увеличиваете размер кода, зато пользуетесь всеми определениями типа GPIO_AF_USART1. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
MasterElectric Опубликовано 21 сентября, 2018 Поделиться Опубликовано 21 сентября, 2018 7 часов назад, snn_krs сказал: Все обозначения типа OSPEEDER, прописываются не в мануале, а в подключаемых файлах типа stm32f4x_gpio.h. Если хитите их использовать, подключите их в свой проект. уж точно не там, а в CMSIS. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
MasterElectric Опубликовано 21 сентября, 2018 Поделиться Опубликовано 21 сентября, 2018 AFR не имеет именованных бит, потому что не нужно. GPIOA->OSPEEDR = GPIO_OSPEEDER_OSPEEDR0_0; типа того. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterElectric Опубликовано 21 сентября, 2018 Поделиться Опубликовано 21 сентября, 2018 8 часов назад, Darth_Vader сказал: Я сейчас, конечно, получу ведро слюны в свой адрес, но посмотри что генерирует Куб для твоего случая не переживай все на easyelectronics сидят. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Электронщик Опубликовано 21 сентября, 2018 Поделиться Опубликовано 21 сентября, 2018 (изменено) Цитата Цитата GPIOA->OSPEEDR = GPIO_OSPEEDER_OSPEEDR0_0; Так я ж так и написал, но в мануале про лишнюю букву E ни слова Цитата AFR не имеет именованных бит, потому что не нужно. А в мануале тогда GPIOx_AFR биты имеют же на наименовение, допустим полубайт для 9ноги имеет биты как и остальные полубайт 3-0. Вообщем запишу как я рассчитал, в первом посте по этой теме, думаю правильно GPIOA->AFR [1]=0x770 Изменено 21 сентября, 2018 пользователем Электронщик 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterElectric Опубликовано 21 сентября, 2018 Поделиться Опубликовано 21 сентября, 2018 (изменено) красивее так (и понятнее) GPIOA->AFR[0] = (3 << 0) | (2 << 12); и т.д. Описание регистров периферии тут: stm32f4xx.h Изменено 21 сентября, 2018 пользователем MasterElectric 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Электронщик Опубликовано 21 сентября, 2018 Поделиться Опубликовано 21 сентября, 2018 (изменено) Можно же так как и я писал? Мне по моему понятнее, а ты же используешь побитовый сдвиг, а он для меня как темный лес, как я понял в 3-й бит записываешь 0, плюс 2*2^12, или как это правильно, с побитовый сдвигом только с регистрами AVR работал, не пойму как правильно это расшифровать? Может так можно записать GPIOD->AFR[1] = (0xA<<0x7)|(0x9<<0x7); тупо в AFRH10 и AFRH9 записать по 0111, то есть в шестнадцатиричной форме 0x7 ? Изменено 21 сентября, 2018 пользователем Электронщик 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterElectric Опубликовано 21 сентября, 2018 Поделиться Опубликовано 21 сентября, 2018 Ну это удобнее для работы с группами бит. Вот AFR 8 групп по 4 бита (0 - 15). например для записи AFRL7 нужно сдвигать значение на 28 бит, а для AFRL3 - на 12, имеем ... = (3 << 28) | (1 << 12); AFRL7 = 3, AFRL3 = 1. Обычные битовые операции. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Oxford Опубликовано 21 сентября, 2018 Поделиться Опубликовано 21 сентября, 2018 (изменено) 14 часа назад, Электронщик сказал: Проблема такая, прикупил f407 камень и начал изучать, и все вроде ничего, но вот с ЮАРТ проблема появилась, а именно не могу настроить альтернативные функции на PA9 PA10, для ЮАРТ IAR ругается на такую запись GPIO_AFR_AFRH9_2, находил в нете где просто присваивают значение всему регистру, типа что-то такого GPIOA->AFR [1]=0x00077, но тут не могу понять как его правильно записывать, если остальные ноги порта мне не нужно назначать как альтернативные функции то пишем нули?, тогда получается для PA9 PA10, нужна 7-я альтернативная функция - это 2-й 1-й и 0-й биты по 1, И не понятно почему я не могу таким образом записать это побитно, так: GPIOA->AFR |=GPIO_AFR_AFRH9_2|GPIO_AFR_AFRH9_1|GPIO_AFR_AFRH9_0|GPIO_AFR_AFRH10_2|GPIO_AFR_AFRH10_1|GPIO_AFR_AFRH10_0 ;//назначение альтернативных функций Почему IAR пишет что не знает такого? И еще вопрос почему при назначении скорости в регистре GPIOx_OSPEEDR , если я напишу GPIO_OSPEEDR- без буквы E между D и R( вот так выделил красным где должна быть буква E: GPIOB->OSPEEDR |= GPIO_OSPEEDR_OSPEEDR14_1, в слове OSPEEDER, то IAR ругается, а если с этой буквой все хавает, ведь в мануале, нигде об этом не написано, это ошибка разработчиков, или компилятора, или что- то другое? Вот так без проблем работает: GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR14_1;// GPIO_OSPEEDER-должна быть буква E между D и R, в слове OSPEEDER И еще вопрос на 103 камень нужно включать тактирование альтернативных функций, на 407 не нужно? Если я правильно понял. 1. c 8 по 15 название другое, вместо GPIO_AFR_AFRH9_0 идет GPIO_AFRH_AFSEL9_0 или GPIO_AFRH_AFRH1_0 //USART1_TX PA9 GPIOA->AFR[1] |= GPIO_AFRH_AFSEL9_0 | GPIO_AFRH_AFSEL9_1 | GPIO_AFRH_AFSEL9_2; //USART1_RX PA10 GPIOA->AFR[1] |= GPIO_AFRH_AFSEL10_0 | GPIO_AFRH_AFSEL10_1 | GPIO_AFRH_AFSEL10_2; 2. GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR14_1; и GPIOB->OSPEEDR |= GPIO_OSPEEDR_OSPEED14_1; оба варианта рабочие (Legacy defines) 3. GPIO_OSPEEDR_OSPEED14_1 и GPIO_OSPEEDER_OSPEEDR14_1 оба варианта рабочие (Legacy defines) 4. Тактирование в 407 включать не нужно. тогда так что ли GPIOA->AFR [1]=0b00000000000000000000011101110000, или GPIOA->AFR [1]=0x770 ? Присваивать напрямую можно только если значение регистра было нулевым, но есть состояние сброса где не нули, в противном случае вы получите ошибку. Поэтому категорически такие записи не допускаются, только через оператор | Изменено 22 сентября, 2018 пользователем Oxford 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Oxford Опубликовано 22 сентября, 2018 Поделиться Опубликовано 22 сентября, 2018 13 часа назад, Darth_Vader сказал: Я сейчас, конечно, получу ведро слюны в свой адрес, но посмотри что генерирует Куб для твоего случая Еще раз услышу про калокуб...за яйки подвешаю. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Электронщик Опубликовано 23 сентября, 2018 Поделиться Опубликовано 23 сентября, 2018 Цитата 1. c 8 по 15 название другое, вместо GPIO_AFR_AFRH9_0 идет GPIO_AFRH_AFSEL9_0 или GPIO_AFRH_AFRH1_0 //USART1_TX PA9 GPIOA->AFR[1] |= GPIO_AFRH_AFSEL9_0 | GPIO_AFRH_AFSEL9_1 | GPIO_AFRH_AFSEL9_2; //USART1_RX PA10 GPIOA->AFR[1] |= GPIO_AFRH_AFSEL10_0 | GPIO_AFRH_AFSEL10_1 | GPIO_AFRH_AFSEL10_2; Как раз так и хотел, Спасибо!!! только в мануале, я не видел чтобы так были указаны биты как AFSEL, я иногда удивляюсь названиям битов из мануала, а в компиляторе нужно прописывать другие названия, но компилятор хавает, а GPIO_AFRH_AFRH1_0 - ругается, да и так понятнее по битам настраивать, открыл табличку по битам посмотрел и все ясно, , лучше чем присваивать число всему регистру, ну и раз указывают в мануале, то почему не юзать эти биты, ну и второй вариант как я высчитал до этого с оператором или). GPIOA->AFR [1] |=0x770 Цитата 2. GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR14_1; и GPIOB->OSPEEDR |= GPIO_OSPEEDR_OSPEED14_1; оба варианта рабочие (Legacy defines) 3. GPIO_OSPEEDR_OSPEED14_1 и GPIO_OSPEEDER_OSPEEDR14_1 оба варианта рабочие (Legacy defines) Оно то рабочие, только вот в мануале написано что биты имеют название допустим OSPEEDR14_1, почему тогда компилятор хавает GPIO_OSPEEDR_OSPEED14_1;, почему в мануале не пишут что так нужно прописывать биты, или тот вариант как GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR14_1 Как это понимать по мануалу? Или методом тыка пробовать? Вот из мануала, вот где тут написано как правильно писать биты в компиляторе, сдлелали бы так, разработчикам было бы легче, вот на те же АВР, и даже примеры кусков кода есть, а тут хотя бы написали как правильно называть все это в компиляторах? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterElectric Опубликовано 23 сентября, 2018 Поделиться Опубликовано 23 сентября, 2018 Где вы это все берете? AFR вообще не описан в "stm32f4xx.h". В нем 8 групп значений по 4 бита в каждом, ясное дело что удобно работать так GPIOA->AFR[0] = (3 << 0) | (2 << 12); С OSPEEDER такая же фигня, ну придумайте 4 наименования для всевозможных значений для 1 груммы бит, а дальше сдвигом. Из HAL наверное выдрать можно названия. Проявите смекалку) В твоем случае так: GPIOA->AFR[1] = (7 << 4) | (7 << 8); 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterElectric Опубликовано 23 сентября, 2018 Поделиться Опубликовано 23 сентября, 2018 как вариант: #define GPIO_OSPEEDR_LOW 0 #define GPIO_OSPEEDR_MED 1 #define GPIO_OSPEEDR_HIGH 2 #define GPIO_OSPEEDR_VERY 3 GPIOA->OSPEEDR = (GPIO_OSPEEDR_VERY << 18) | (GPIO_OSPEEDR_VERY << 20); А лучше всего напишите свою библиотеку, вот как я настраиваю пины: TGPIO::SetMode(PA2, (gpAlternateMode | gpSpeedHigh | gpAF1)); TGPIO::SetMode(PA3, (gpAlternateMode | gpSpeedHigh | gpAF1)); но тут уж как кому удбнее. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Электронщик Опубликовано 23 сентября, 2018 Поделиться Опубликовано 23 сентября, 2018 Цитата Где вы это все берете? AFR вообще не описан в "stm32f4xx.h". Вот откуда 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterElectric Опубликовано 24 сентября, 2018 Поделиться Опубликовано 24 сентября, 2018 (изменено) ну отлично, только описание регистров тут stm32f4xx.h Если группа регистров принимает значения например от 0 до 15, нафига битики выставлять, если можно записать как есть от 0 до 15. Например регистры DMA совсем отличаються (названием) от описания в мануале и построены иначе, и ничего разобраться можно все есть тут stm32f4xx.h. Изменено 24 сентября, 2018 пользователем MasterElectric 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Oxford Опубликовано 24 сентября, 2018 Поделиться Опубликовано 24 сентября, 2018 (изменено) MasterElectric ваш поток слов не понятен мне. В 23.09.2018 в 14:48, MasterElectric сказал: как вариант: #define GPIO_OSPEEDR_LOW 0 #define GPIO_OSPEEDR_MED 1 #define GPIO_OSPEEDR_HIGH 2 #define GPIO_OSPEEDR_VERY 3 GPIOA->OSPEEDR = (GPIO_OSPEEDR_VERY << 18) | (GPIO_OSPEEDR_VERY << 20); А лучше всего напишите свою библиотеку, вот как я настраиваю пины: TGPIO::SetMode(PA2, (gpAlternateMode | gpSpeedHigh | gpAF1)); TGPIO::SetMode(PA3, (gpAlternateMode | gpSpeedHigh | gpAF1)); но тут уж как кому удбнее. Это делается гораздо проще все, обертки не нужны. GPIOA->OSPEEDR |= GPIO_OSPEEDR_OSPEED2_1 | GPIO_OSPEEDR_OSPEED3_1; GPIOA->MODER |= GPIO_MODER_MODE2_1 | GPIO_MODER_MODE3_1; GPIOA->AFR[0] |= GPIO_AFRL_AFSEL2_0 | GPIO_AFRL_AFSEL3_0; Электронщик вы все поняли, есть еще вопросы? Изменено 24 сентября, 2018 пользователем Oxford 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Электронщик Опубликовано 24 сентября, 2018 Поделиться Опубликовано 24 сентября, 2018 Цитата Кроме того что, я выше ответил Вам, откуда брать название AFSEL, и т.д., если они в мануале не прописаны? Смотреть в stm32f4xx.h ? И нормально ли так по битам это настраивать? Я так и со 103 камнем делал, мне так удобно, чем пользоваться битовыми операциями 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Oxford Опубликовано 24 сентября, 2018 Поделиться Опубликовано 24 сентября, 2018 (изменено) 1 час назад, Электронщик сказал: Кроме того что, я выше ответил Вам, откуда брать название AFSEL, и т.д., если они в мануале не прописаны? Смотреть в stm32f4xx.h ? И нормально ли так по битам это настраивать? Я так и со 103 камнем делал, мне так удобно, чем пользоваться битовыми операциями Описания в CMSIS хедере могут меняться в зависимости от версии CMSIS (поэтому описания регистров могут иметь поддержку наследования старых версий не пугайтесь). Нужно активно работать с текущим API файлом stm32f4xx.h. Когда вы пишите в редакторе вам вылазит подсказка там смотрите что доступно. Определения битов хорошо описаны,откройте файл и пролистайте посмотрите для регистра описание битов и все станет ясно, в референс мануале вам надо смотреть какие биты выставлять и в какой регистр и читать как работает периферия. В основном описание битов идет так ПЕРИФЕРИЯ_РЕГИСТР_БЛОКБИТОВ_НОМЕРБИТА Весь API это структуры периферии и описание битов для регистров. В файле есть комментарии. Работать с битами это правильно, в регистре смотрите какие биты выставить и пишите нужные. Если в блоке выставлены все биты, есть определение одной записью где все биты выставлены, чтобы не писать несколько. Например надо выставить два бит 0 и 1 биты, вместо GPIO_OSPEEDER_OSPEEDR0_0 | GPIO_OSPEEDER_OSPEEDR0_1 лучше писать просто GPIO_OSPEEDER_OSPEEDR0; Например. Смотрим мануал и там написано что для выставления альтернативной функции AF1 нужно выставить 0 бит (0001: AF1) значит запрограммируем 0 бит для 2 ножки в порту A GPIOA->AFR[0] |= GPIO_AFRL_AFSEL2_0; Изменено 24 сентября, 2018 пользователем Oxford 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Электронщик Опубликовано 26 сентября, 2018 Поделиться Опубликовано 26 сентября, 2018 Жаль только в IAR таких подсказок по регистрам я не видел, или нужно в IAR это настроить? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Oxford Опубликовано 26 сентября, 2018 Поделиться Опубликовано 26 сентября, 2018 (изменено) По IAR не подскажу. Специализируюсь по KEIL. CTRL + ПРОБЕЛ попробуйте нажать. когда пишите код, у KEIL она так вызывается. Изменено 26 сентября, 2018 пользователем Oxford 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
optima Опубликовано 27 сентября, 2018 Поделиться Опубликовано 27 сентября, 2018 11 час назад, Электронщик сказал: Жаль только в IAR таких подсказок по регистрам я не видел Если вы их не видели это не значит что их там нет, настраивать ничего не нужно все там есть. 0 Сергей. Ссылка на комментарий Поделиться на другие сайты Поделиться
Электронщик Опубликовано 27 сентября, 2018 Поделиться Опубликовано 27 сентября, 2018 Optima, а как их включить эти подсказки в IAR? У меня не показывает так, при нажатии CTRL+пробел иногда выскакивает, а так в основном пишет слово working? Ну и даже это не то как у Oxford у него в Keil, подчеркивает что бит регистра не так называется и выдает подсказку нужного бита, это лучше чем в IAR где ты из кучи регистров при нажатии на CTRL+пробел который почему-то срабатывает не понятно как, должен выбрать сам нужный регистр, или биты регистров, так еще и не подчеркивает что не так он называется в компиляторе как в Keil. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Oxford Опубликовано 27 сентября, 2018 Поделиться Опубликовано 27 сентября, 2018 (изменено) Ну подчеркивание это в редакторе KEIL реализовано, называется эта плюшка динамическая проверка синтаксиса. Если неправильно пишешь он сразу подчеркивает и подсказки может написать что ему не нравиться. Изменено 27 сентября, 2018 пользователем Oxford 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
optima Опубликовано 28 сентября, 2018 Поделиться Опубликовано 28 сентября, 2018 11 час назад, Электронщик сказал: как их включить эти подсказки в IAR? Они должны быть автоматом, какой версии у вас IAR? У меня такой: 0 Сергей. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.