Перейти к содержанию

STM32 для чайника


ART_ME

Рекомендуемые сообщения

Попробуйте BRR = 0x0271 и скорость в терминале 57600.

Кстати, а в какой регистр вы пишите значения для выброса в порт? Нужно писать в USART1->DR = 0x37 (например).

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

32f103С8T6, частота тактирования проца 72МГц(кварц 8МГц), частота APB1 36МГц

Screenshot_5.thumb.jpg.00fd474af7677611ecab24b830c426f8.jpg

Zhuk72

 

Изменено пользователем Электронщик
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

MasterElectric на APB2, это вы нашли в RM, или где это можно посмотреть? И Еще есть ли у кого пример инициализации частоты тактирования проца и шин?

А я тоже где то в нете нашел пример, и там был APB1 видимо под другой проц было, и я не посмотрел тоже, позже попробую.

Ссылка на комментарий
Поделиться на другие сайты

Цитата

 

Я же давал, вы что.

Под ваш же чип)

 

Спасибо, запутался в трех соснах))), просто стал хоть более менее понимать что как и почему, вот на АВР расписано хоть много чего, а тут чисто RM и на английском, да и архитектура же другая).

 

Ссылка на комментарий
Поделиться на другие сайты

@Электронщик , в инициализации исправьте значение BRR = 0x0271 и скорость в терминале установите 57600.

Далее,

Скрытый текст

...
while(1)
{
	while(!(USART1->SR & USART_SR_TXE));	// Ждем опустошения буфера
	USART1->DR = 0x37;			// Загружаем данные в буфер ('7').
}

 

Для начала достаточно.

Изменено пользователем Zhuk72
Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, MasterElectric сказал:

Ну покажите тогда качественное законченное устройство что был написан на HAL

я могу показать и не одно

Блок питания с фиксированным набором напряжений и контролем тока в каждом полюсе + регулируемый источник опорного напряжения. Управляется энкодером/ Дисплей I2C SOG (не 1602 и не модификации с расширителями)

IMG_9610.thumb.JPG.d77749afeeb828bc9fcb19548f328c2e.JPG

Электронная нагрузка (HAL+CMSIS OS). Достаточно сложное прецизионное устройство, обьем скомпилированного кода > 32К. Растровый дисплей 320х240. Очень много ДМА. Скорость работы дисплея достаточная даже для просмотра видео с полукадровой разверткой.

IMG_20160612_000410.thumb.jpg.686c497ad6e3d20c08c55475c1bd468c.jpg

суточный таймер с двумя уставками. Сверхнизкое энергопотребление

IMG_20170309_144441_HDR.thumb.jpg.08dee0529c803556b7f3da2f4db221e3.jpg

часы реального времени высокой точности (3,5 секунды в месяц) с трансляцией таймкода в сеть. Эталонные системные часы дающие сигнал точного времени всем устройствам сети. Индикация на SPI LED контроллере. Управление по терминалу UART

IMG_20161115_233845.thumb.jpg.09f3de74ac84f27d83b0f5bf7390cfd7.jpg

автомат ввода резерва (контроллерная часть). Управляет запуском резервного генератора, контролирует сеть, заряжает аккумулятор и беспокоится о текущей эксплуатации генератора. Корпуса не имеет, так как монтируется в электрошкаф на стенку. С виду просто, но обьем кода весьма значительный. Одно из самых сложных устройств по части кода в виду того, что объект управления очень ответственный с множеством нюансов в управлении, начиная от пуска и продолжая различными алгоритмами цикличности работы в разных ситуациях

IMG_20170309_152236_HDR.thumb.jpg.bbd90b71a74a55f3af4e17d92c42fb0e.jpg

все это написано на HAL и прекрасно работает в моем хозяйстве. И это еще далеко не все. Как можно заметить по датам на экранах - устройства изготавливались одно за одним. На разработку и допилку кода максимум неделя. Сделать это на чем то кроме HAL было бы крайне затруднительно

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

код не тайна и выкладывался в разных темах уже не раз. Моя реализация управления растровым дисплеем даже уже прошла допилку начинающим (!) пользователем STM32 @Alex Falcon который купил первую платку диско где-то с пару месяцев назад. Это говорит о том, что в чужой код на HAL код въехать очень просто даже новичку. Не надо расшифровывать регистровые иероглифы SPL. Код хорошо документирован и понятен интуитивно

Допилка заключалась в оптимизации буфера знакогенератора под процы с небольшим объемом RAM и добавки скроллинга к функционалу библиотеки. Если буфер без оптимизации и каменm типа F103VET(VCT)6, то скорость еще выше

E_Load_LCD_LAST.zip

1 час назад, MasterElectric сказал:

Очень круто!!!

вот именно очень круто начало получаться только тогда, когда полностью перешел на HAL. Меньше стал думать о том как буду писать прошиву и больше времени остается на саму конструкцию и вниманию к мелочам

вот пример работы моей либы с дополнениями (на чистейшем тормознутом HAL). Используется диско F0 с камнем F051

 

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, MasterElectric сказал:

А УСАРТ1 на другой шине сидит

Он сидит так как у меня в инициализации на шине APB2 и прописано так и было,  только скорость я брал не 72МГц, а 36МГц, ну поставил скорость ЮАРТ 57600 от 72МГц(APB2), и ничего не работает.  Да и посадить не на ту шину сам IAR не дает, я уже пробовал), а вот не ту скорость задать можно.

Вот так сейчас

Скрытый текст

void usart1_port(){
  // PA9 - TX1, PA10 - RX1
  // PA9 - AF p-p, PA10 - Input float/PU
  RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
  GPIOA->CRH &= ~(GPIO_CRH_CNF9_0 | GPIO_CRH_CNF10_0 | GPIO_CRH_MODE10 | GPIO_CRH_MODE9_0);
  GPIOA->CRH |= (GPIO_CRH_CNF9_1 | GPIO_CRH_CNF10_1 | GPIO_CRH_MODE9_1);
  GPIOA->ODR |= GPIO_ODR_ODR10;
}


void usart1_init(){
  usart1_port();
  RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
  USART1->BRR = 0x271;
  USART1->CR1 |= (1<<USART_CR1_UE)|(1<<USART_CR1_TE); //Разрешаем работу USART1, Включаем передатчик

}

 

 

Изменено пользователем Электронщик
Ссылка на комментарий
Поделиться на другие сайты

перестаньте сдвигать маски!!!

А я вспомнил я же уже интересовался этим экраном и примером, надо же вылетело из головы

Постораюсь перебороть себя и попробовать разобраться, если что буду спрашивать)

Изменено пользователем MasterElectric
Ссылка на комментарий
Поделиться на другие сайты

@mail_robot попытался сгенерировать проект под Atollic True Studio что-то куски повыдирало из проекта, да и Cuboвские функции отличаються от ваших. буду руками переводить потихоньку.

Изменено пользователем MasterElectric
Ссылка на комментарий
Поделиться на другие сайты

 MasterElectric, действительно в этом проблема была, но теперь проблема вроде как не правильно скорость настроена, при 0x271 должна быть скорость 57600, а вышла 115200, почему так не знаю. Получилось что линия тактирования APB2 у меня настроена на 143884800Гц.

Изменено пользователем Электронщик
Ссылка на комментарий
Поделиться на другие сайты

,Я эту формулу знаю,и знаю что частота тактирования у меня по шине APB2 72МГц, следовательно при 0x271, скорость должна быть, не знаю что так, но работает.

Ссылка на комментарий
Поделиться на другие сайты

например 115200 это 39.0625 целую часть сдвигаем на 4 бита влево, дробную делим на 0,0625 (1 / 16), т.е 0.0625/0.0625 = 1 и прибавляем к целой части

USART1->BRR = (39 << 4) | 1;

9 минут назад, Электронщик сказал:

,Я эту формулу знаю,и знаю что частота тактирования у меня по шине APB2 72МГц, следовательно при 0x271, скорость должна быть, не знаю что так, но работает.

у меня вышло USART1->BRR = (78 << 4) | 2; а у вас 0х271

Изменено пользователем MasterElectric
Ссылка на комментарий
Поделиться на другие сайты

В даташите да эта формула, а в нете лежит эта формула, которая первая, а по ней получается не правильное число, вот в чем проблема.

Цитата

 

Регистр делится на две части: Целая (DIV_Mantissa) и дробная (DIV_Fraction). Для получения значения которое нужно записать в этот регистр, нужно воспользоваться формулой:

USART_BRR = (fck + baudrate /2 ) / baudrate

где fck это частота тактирования UART1, а baudrate это желаемая скорость передачи/приёма. Со скоростью всё понятно, а как определить fck ? Забегая вперед, скажу, что это отдельная тема для большой статьи (которая будет). Эта частота будет равна 24 Мгц если использовать кварц на 8 МГц и ничего не менять в настройках тактирования, а оставить их по умолчанию. Приведу пример рассчётов: Я хочу настроить уарт на скорость 9600. Путем нехитрых рассчётов получаем (24000000 + 9600 / 2)/ 9600 = 2500.5 потом отсекаем дробную часть, переводим число в шестнадцатеричную систему счисления и получаем 0x9c4. Еще есть другая формула, руководствуясь которой можно вычислить значение регистра USART_BRR. В биты DIV_Mantissa следует записать целое число(без округления) полученное в результате выполнения арифметической операции:

fck / (16*baudrate)

Дробную часть нужно округлить до сотых и умножить на 16. Потом еще раз округлить но уже до целого. После этого записать её в биты DIV_Fraction. Попробуем рассчитать регистр USART_BRR но уже с использованием этого способа. 24000000 / (16 * 9600) = 156,25. Целая часть 156 - пойдет в DIV_Mantissa без изменений, а дробную часть 0.25 умножаем на 16 и получаем 4. Округлять тут нам не пришлось, поэтому в DIV_Fraction записываем 4. Переведем 156 и 4 в шестнадцатиричную систему счисления и получим 0x9c и 0x04 а вместе они образуют 0x9c4. В итоге мы получили тот же самый результат. Но лично мне первый способ больше по душе :)

 

А так да 39 в 16 ричной форме 27+1=0x271, тогда да 115200 скорость

Ссылка на комментарий
Поделиться на другие сайты

да правильно, но первая формула что-то очень забавная)) как ее вывели) и она работает

Изменено пользователем MasterElectric
Ссылка на комментарий
Поделиться на другие сайты

Так, я же посмотрел, первая без заморочек, вот и посчитал, а она не правильная, кто ее вывел не знаю, вот ссылка http://easystm32.ru/interfaces/15-uart-in-stm32-part-1

Сейчас попытаюсь АЦП настроить.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...