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

STM32 для чайника


ART_ME

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

2 минуты назад, mail_robot сказал:

универсализация чаще всего оказывается только недостатком

Но если драйвер будет отделен от остальных частей, то только его замена позволит применять уже готовую либу с другими дисплеями. Если инициализацию кэширования сделать отдельно, то при неиспользовании функции кэшированного вывода текста, эта часть и компилироваться не будет в проект, то есть лишнего места не займет... А каждый раз заново прораммировать кэш тоже лениво.. :) 

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

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

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

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

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

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

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

Подскажите вот какую вещь. Глянул на базовое смещение ЦАПа у STM32F100C8T6B (там целых 2 встроенных ЦАПа) при нулевой установке, смещение получается около 64мВ.

Собственно есть ли способы как то его уменьшить, а лучше конечно вобще избавится?

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

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

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

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

у однополярных ЦАП смещение как правило. Избавиться от него нельзя. Можно уменьшить, отключив буферизацию (буферный ОУ на выходе ЦАП. Смещение уменьшится где-то до 1,5 мВ). В остальном см предыдущий пост

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

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

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

  • 2 недели спустя...

Вопрос такой, есть где что почитать именно по работе с регистрами на STM32? А то с HAL - библиотеками поработал,  все вроде ничего, но нигде не нахожу хотя бы пример настройки тех же портов  ввода-вывода, только читаю что STL жутко тормозит и мол криво написан, а  HAL вообще ужас и использование куба и HAL это самое плохое, типа как использовать writing от Arduino и писать для AVR на нем, и вот хотя мне куб и HAL очень нравятся, и с регистрами я немного работал в STM именно проверяя флажки и считывая или выводя данные по разным интерфейсам, и внешние прерывания, но хотелось бы найти примеры по настройкам регистрами по портам ввода- вывода, по SPI, I2C, ADC, а то вроде по даташиту и понятно, но без примеров тяжеловато, а их в нете вообще не нахожу в 85% примеров в основном используют либо STL либо HAL 10%, особенно тяжело после AVR, именно по регистрам STM. И опять же задумался стоит ли использовать библиотеки стандартной периферии и пользоваться кубом, либо убивать кучу времени и сил на регистры и пробовать так, общался с одним разработчиком с Чехии, он утверждает что они на STM пишут без использования библиотек, хотя я и не уточнил используют ли они библиотеки стандартной периферии, но я так понял что вроде нет, и вроде как они на ассемблере программируют СТМ32, как по мне это убийство времени и трата сил на ассемблере с СТМ возится, кто что думает?

Хотя почитал здесь, что лучше всего использовать стандартные библиотеки периферии, так что думаю HAL и куб не плохо использовать из статьи с нета, но точно не уверен, но на счет времени читаемости, простоты, кросс-платформенности, это конечно плюс, вот  так как цитирую: 

Цитата

 

Число регистров для микроконтроллеров STM32 в большинстве моделей превышает тысячу. Если использовать прямое обращение к регистрам, пользовательский код станет нечитаемым и абсолютно непригодным для поддержки и модернизации. Эта проблема может быть решена при использовании стандартной библиотеки периферии (standard peripheral library).

Стандартная библиотека периферии – это набор низкоуровневых драйверов. Каждый драйвер предоставляет пользователю набор функций для работы с периферийным блоком. Таким образом пользователь использует функции, а не обращается напрямую к регистрам.

Например, взаимодействие с портами ввода/вывода в STM32L0 реализовано с помощью драйвера, выполненного в виде двух файлов: stm32l0xx_hal_gpio.h и stm32l0xx_hal_gpio.c. В stm32l0xx_hal_gpio.h даны основные определения типов и функций, а в stm32l0xx_hal_gpio.c представлена их реализация.

Такой подход имеет вполне очевидные достоинства (таблица 1):

Screenshot_4.jpg.c4fb3856931c48474fedca14e2996fd4.jpg

Быстрота создания кода. Программисту не требуется изучать перечень регистров. Он сразу начинает работать на более высоком уровне. Например, для прямого взаимодействия с портом ввода/вывода в STM32L0 необходимо знать и уметь работать с одиннадцатью регистрами управления/состояния, большинство из которых имеют до 32 настраиваемых битов. При использовании библиотечного драйвера достаточно освоить восемь функций.

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

Высокий уровень абстракции. При использовании стандартной библиотеки код оказывается достаточно платформо-независимым. Например, если сменить микроконтроллер STM32L0 на микроконтроллер STM32F0, часть кода, работающего с портами ввода/вывода, вообще не придется менять.

 

Наличие дополнительной оболочки в виде драйверов имеет и очевидные недостатки (таблица 1):

Увеличение объема кода программы. Реализованные в библиотечном коде функции требуют дополнительного места в памяти.

Повышенные затраты ОЗУ за счет увеличения числа локальных переменных и использования громоздких структур данных.

Снижение быстродействия за счет увеличения накладных расходов при вызове библиотечных функций.

Именно наличие этих недостатков приводило к тому, что пользователь зачастую был вынужден оптимизировать код – самостоятельно реализовывать функции взаимодействия с CMSIS, оптимизировать библиотечные функции, убирая все лишнее, копировать реализации библиотечных функций непосредственно в свой код, использовать __INLINE-директивы для увеличения скорости выполнения. В результате, тратилось дополнительное время на доработку кода.

 

 

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

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

кто что думает?

Ну вобще я вам как программист с большим стажем скажу так. Писать нужно так, как вам больше нравится если это не выходит за рамки ТЗ. Я сейчас могу себе позволить писать практически на любом популярном языке. Мне по сути уже пофиг на чем писать именно в плане общественных стереотипов. Я могу сервер на JAVA написать, а могу и текст на C++ обрабатывать. В принцепе пофиг, в планы укладываюсь, меня все устраивает и кайфова.

Если разработчик пишет на АСМе то есть 2 варианта - потому что так нужно и потому что так нравится. 

В вашей же ситуации нету никакого ТЗ, поэтому решайте свои задачи любым подходящим для вас путем. 

Вобще вас никто не заставляет писать например чисто на HAL. Вы можете писать на HAL но в нужных местах писать на регистрах. Если что то компиляторы позволяют  даже асемблеровские вставки делать, вы можете писать на HAL и на АСМе.

Все это лишь абстракции. Учитесь их использовать и создавать.

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

Короче нету крайности, все нужно использовать рационально, и это вы должны решать сами.

Кстати вы можете посмотреть исходники библиотек HAL там нету ничего серьезного, все понятно вполне себе. Посути можно писать на HAL  до рабочего состояния а потом просто смотреть исходники и что там происходит. Все довольно просто.

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

Цитата

Вобще вас никто не заставляет писать например чисто на HAL. Вы можете писать на HAL но в нужных местах писать на регистрах. 

Уже писал так, только вот тогда не все регистры работают, как мне в этой теме уже писали, что если используешь HAL так и используй до конца, иначе так и будет что какие -то регистры не работают, в частности SPI регистр передачи данных у меня не заработал, при конфигурации HALom, АЦП -шный регистр данных  работает при тоже конфигурации HALom, И ШИМ на регистрах работает.

Ну мне удобно писать на кубе + HAL+ где знаю и где работают регистры применять, но не знаю на сколько это правильно допустим у разработчиков, вот и и подумываю, стоит ли убивать кучу времени на регистры, а потом после СТМ32 появится что-то другое и опять убивай время, конечно куб+ HAL, очень удобная простоя и экономящая вещь штука. 

Вообщем то я понимаю что регистры там память экономят и там быстродействие лучше, но не зря же пытаются разработчики упростить это все, так как выпустят допустим STM64бита, и настроек будет в 2 раза больше, а это уже 2000 регистров, если у STM32 1000регистров.

Лучше тогда так по не многу добавлять регистры, но особо не заморачиваться, так как и кроссплатформенности не будет и читаемость ухудшиться, нужно как я понимаю что-то среднее держать?

А вообще я начинал с вайринга и даже в ардуино иде писал на С+ вайринг, или С конфигурирую, а если специфический датчик, то библиотеку ардуиновскую подкинул, и сэкономил время, но вот все проклинают вайринг, а допустим кто на асме сидит проклинают сишников и говорят что они не правы, сишники проклинают вайринг, но я считаю чем выше язык да он может больше память занимает, да он замедляет код, но он ускоряет написание кода, и делает возможный его перенос, и улучшает читаемость, это лично мое мнение. Да и процессоры быстро меняются, и за регистрами каждого процессора не угонишься

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

И еще вопрос, вот если я использую тоже считывание по регистрам и флажки для проверки, но конфигурация с помощью HAL, это дает какой-то прирост скорости, и уменьшает ли размер кода, или прирост будет только при конфигурации по регистрам и обработке данных тоже по регистрам?

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

@Электронщик

вы очень глубоко заблудились в лесу из 3-х сосен. Любая ипостась абстракции для STM прежде всего (и единственно возможно) опирается на обыкновенный регистровый код. Сам по себе SPL или HAL это просто обертка из названий функций и макросов. Представьте себе, что регистры ваши, это конфеты. Если вы их насыпете в пакет, это будет SPL, а если в коробку накидаете (даже в тех же пакетах), получится HAL. Вы и так пишете на регистрах, только не хотите это видеть, а то что я писал о единообразии кода, это я хотел подвести вас к мысли о том, что так будет проще избежать ошибок. Нафига все конфеты кидать в коробку, а кучку еще сыпать сверху? А потом тащить все это через лес к бабушке. Понятно что часть конфет будет тащить неудобно и они постоянно будут сверлить мозг как бы их не потерять и не рассыпать. Поэтому идти мы будем медленно, постоянно останавливаясь и подбирая упавшие конфетки.

Пишите на HAL если нравится и не заморачивайтесь вообще. tar верно говорит - делать надо так как нравится и получается. А если работает - в баню всех "проклинателей", они просто глупостями занимаются, навязывая свои пафосные точки зрения.

Почему так мало библиотек под STM? Все ардуинщики в первую очередь сетуют на этот факт и удивляются. Ответ прост - а они не нужны. Вернее нужны, но только по каким то особым случаям. Типа растрового дисплея и так далее. А если например мне надо подоткнуть какую нибудь I2C епромку, проще за секунду нацарапать три строчки, чем искать либу, ковырять ее, думать как она там работает и компилируется. HAL позволяет легко обходить большинство таких задач. Можно сказать тоже библиотека, но в виде книг, разорванных на странички. Можно довольно быстро собрать роман или детектив, а можно справочник. Но только такой, который нужен именно тебе в данный момент.

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

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

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

Да то что там регистры это я понимаю, просто смотрю библиотеки тех же GPIO так там маска на маске, а самих регистров где они там спрятаны, по крайней мере в IAR открываю библиотеку GPIO, и не вижу, возможно эти маски используются еще в другой библиотеки и там регистры. А на счет вопроса вот если я использую тоже считывание данных или запись данных по регистрам и флажки для проверки, вместо функций HAL, но конфигурация сделана с помощью HAL, это дает какой-то прирост скорости, и уменьшает ли размер кода, или прирост будет только при конфигурации по регистрам и обработке данных тоже по регистрам?

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

Вот есть несколько вопросов, по регистрам. Вот HALom есть инициализация АЦП, все хорошо, но вот так вот код работает:

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

 

HAL_ADCEx_InjectedStart(&hadc1);
while(!(ADC1->SR & ADC_SR_JEOC));
data11=ADC1->JDR2;

 а так нет:

ADC1->CR2 |=(1<<ADC_CR2_ADON)|(1<<ADC_CR2_JSWSTART);
while(!(ADC1->SR & ADC_SR_JEOC));
data11=ADC1->JDR2;

 

Далее есть передача данных по ЮАРТ через регистр, настройка опять же HALom, так вот вопрос, убираю инициализацию от HAL, и включаю свою функцию инициализации ЮАРТ, но при этом ЮАРТ перестает работать 

void USART1_UART_Init(){
 
USART1->BRR=0x30; //BaudRate 250000
USART1->CR1 |= USART_CR1_UE; //Разрешаем работу USART1
USART1->CR1 |= USART_CR1_TE; //Включаем передатчик

}

 

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

Я вот изначально начал с изучения регистров и не люблю HAL, но я пытался вначале его изучить и для меня он показалься совсем запутанным и не логичным и я бросил. Чтобы качественно писать на  HAL его тоже нужно изучить с ног до головы, так лучше изучать регистры чем HAL. Смотрю на примеры HAL и вижу дикие для себя вещи, понимая как оно устроенно на регистрах вы можете делать что угодно и как угодно, а HAL ограничивает вас тем что уже есть. А обработка прерываний в HAL это просто ужас. Да вы долго пишите но 1 раз, потом уже у вас готовый пример и все вы его используете вторично. На счет GPIO так все порты можно настроить 10 - 15 строк. Я уверен что 90% любителей не делают настолько сложные вещи чтобы прибегать к библиотекам в целом. 

  Вы включаете тактирование модулей?

вот например настройка портов:

void PIO_Init(void)
{
  AFIO->MAPR = AFIO_MAPR_SWJ_CFG_JTAGDISABLE;

  GPIOA->CRL = IN0_FLOATING | IN1_FLOATING | OUT2_ALT_PUSH_PULL_50MHZ | IN3_PULL | IN4_FLOATING | IN5_FLOATING | IN6_FLOATING | IN7_FLOATING;
  GPIOA->CRH = 0x08800000 | IN8_FLOATING | IN9_FLOATING | IN10_FLOATING | IN11_FLOATING | IN12_FLOATING | IN15_FLOATING;
  GPIOA->ODR = 0x2000 | GPIO_ODR_ODR3;

  GPIOB->CRL = OUT0_GEN_PUSH_PULL_50MHZ | OUT1_GEN_PUSH_PULL_50MHZ | OUT2_GEN_PUSH_PULL_50MHZ | OUT3_GEN_PUSH_PULL_50MHZ | OUT4_GEN_PUSH_PULL_50MHZ | OUT5_GEN_PUSH_PULL_50MHZ | OUT6_GEN_PUSH_PULL_50MHZ | OUT7_GEN_PUSH_PULL_50MHZ;
  GPIOB->CRH = OUT8_GEN_PUSH_PULL_50MHZ | OUT9_GEN_PUSH_PULL_50MHZ | OUT10_GEN_PUSH_PULL_50MHZ | OUT11_GEN_PUSH_PULL_50MHZ | OUT12_GEN_PUSH_PULL_50MHZ | OUT13_GEN_PUSH_PULL_50MHZ | OUT14_GEN_PUSH_PULL_50MHZ | OUT15_GEN_PUSH_PULL_50MHZ;
}

дефаны там мои, но суть та же.

или таймер, прерывание по переполнению.

void TIM3_Init(void)
{
  TIM3->PSC = 2;
  TIM3->ARR = 0xffff;
  TIM3->SR = 0;
  TIM3->DIER = TIM_DIER_UIE;
  TIM3->CR1 = TIM_CR1_URS | TIM_CR1_CEN;
}

 

или тактирование F103C8 макс.частоты. + вкл. тактирование модулей:

void SysClock_Init(void)
{
  FLASH->ACR = 0x30 | FLASH_ACR_LATENCY_1;

  RCC->CR |= RCC_CR_HSEON;
  while(!(RCC->CR & RCC_CR_HSERDY));
  RCC->CFGR = RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL9 | RCC_CFGR_PPRE1_2;
  RCC->CR |= RCC_CR_PLLON;
  while(!(RCC->CR & RCC_CR_PLLRDY));
  RCC->CFGR |= RCC_CFGR_SW_PLL;

  RCC->AHBENR = 0x00000014 | RCC_AHBENR_DMA1EN;
  RCC->APB1ENR = RCC_APB1ENR_TIM3EN | RCC_APB1ENR_USART2EN;
  RCC->APB2ENR = RCC_APB2ENR_AFIOEN | RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN | RCC_APB2ENR_IOPCEN | RCC_APB2ENR_TIM1EN;
}

 

Да я со времен АВР привык эеономить все что можно, плохого ничего не вижу. Опыт он накапливается и примеры кода тоже, а в HAL нет никакой ценности, т.к. железо понять он вам не даст.

Ну а почему не работает отладчик в помощь, он покажет все.

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

MasterElectric, они же HALOM должны быть включены, по крайней мере прописано это HALom у меня в коде, но не хочет HAL с регистрами почему-то работать, либо полностью весь модуль на регистры нужно переводить, либо HALom пользоваться, Спасибо, то что нужно, буду пробовать и разбираться, хоть и не охота).

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

Все что может быть плохого это то что HAL вносит свои изменения в регистры (вы же не знаете что он там делает с ними), а вы свои. Но отладчиком можно по шагам посмотреть что происходит?

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

Скажу вам как разработчик устройств в том числе и на STM32 (программист).
На HAL в основном ругаются ардуинщики/AVR-щики - раньше они писали сразу в регистры, а сейчас хотят сохранить старые привычки. Но дело в том что у тех-же AVR-ов было только пару десятков регистров, скромная по функционалу периферия, мало памяти - которую надо было экономить.

А сейчас посмотрите на ARM-овские контроллеры (не только на STM32) - у них память в разы больше (и SRAM, и Flash), а регистров и режимов столько что черт ногу сломит. Для чего учить/делать то что уже сделано для нас?! Никто не запрещает по извращатся и написать свой HAL или SPL, но будьте готовы потратить на это много часов (в долгой отладке и чтению мануалов к процессоры, к архитектуре и к разным блокам). А еще производители могу встроить в процессор сторонний USB stack (для примера), а описание регистров итд они укажут что находятся в документации того стороннего производителя, и не знаю как вы, но я не готов тратить часы или дни на это муторное дело.

Еще другое - если вы (как и я) работаете в большой фирме, то в один день придет необходимость перейти на другой STM32 (по дешевле, по мощнее, или с ногами по больше), если вы используете HAL, то вы просто поменяете в IDE один процессор на другой (и возможное вызов пару функции на вызов других пару функции, если контроллеры сильно отличаются) и на этом все.
А представьте себе такой переход без HAL-а, где 80% регистров нужно будет поменять на другие, еще %10 регистров добавить, а у некоторых поменяется поведение. Меня не очень радует такая перспектива...

Если вы не делаете мега-контроллеры которые должны работать мега-быстро то можете смело использовать HAL/SPL/свой хал. Да и другом случае, сейчас легче и дешевле купить контроллер который работает на частоту повыше, чем оптимизировать все до процессорного такта.

Задумайтесь о другом - почему сейчас программы для Windows/Linux/Embedded Linux (ака домашний wi-fi роутер) не пишут на ассемблере, ведь они будут работать быстрее?!

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

люди просто в мутном тумане AVR не понимают что STM32 создан для того, чтобы в корне изменить философию эмбедед кодинга и продолжают тупить по старинке. Считая при этом, что поступают абсолютно правильно. Ругают ХАЛ, говорят что он мутный и сложный. А реально, просто скрывают за руганью нежелание сделать усилие над собой и понять что в действительности это лучший инструмент из возможных. Причем как только ты понимаешь философию самого ХАЛ, он становится просто кристально понятным. Можно даже не читая мануал писать чуть ли не наугад, просто зная правила именования. А читабельность и самодокументируемость кода просто сказочная

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

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

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

пять копеек вставлю.

Я, как начинающий STM-щик, переходящий с Arduino, скажу одно - если бы не HAL и CUBE, еще долго бы путался в даташитах и т.п., А так - единый подход к работе со структурой процессора, совместно с дефайнами, поднимающий работу с камнем на новый уровень абстракций, позволяет сосредоточиться именно на программировании задачи и не морочиться с таймаутами и т.п. 

блин, путанно как-то, но я доволен как паровоз от знакомства с STM32! :)

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

я знал, что у вас все получится. И довольно быстро B)

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

При использовании правильных инструментов, программирование STM32 превращается из рутины в творчетсво. И AVR во всех его ипостасях потом вспоминается как страшный сон.

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

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

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

Так мне же очень нравиться HAL я на нем вместе с cubom за 2 недели, прощупал всю периферию(ну не скажу что во всех режимах и настройках и полностью), кроме ЮСБ, CAN, IRDA SMART, и это сэкономило кучу времени и сил. Ладно буду использовать HAL и куб, и использовать иногда регистры, именно для передачи и приема данных с проверкой флажков, это не сложно, туже настройку калибровки АЦП сделал регисрами, а именно с инициализацией периферии, считаю только трата времени и сил. Спасибо всем, более менее успокоился).

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

В 20.07.2017 в 00:29, Электронщик сказал:

выпустят допустим STM64бита, и настроек будет в 2 раза больше, а это уже 2000 регистров, если у STM3

Вы запутались. Смысл разрядности не в количестве регистров, а в разрядности ДАННЫХ. От увеличения разрядности, если вдруг появится СТМ64, количество регистров наоборот упадет. Сейчас уже полно регистров, у которых половина, а то и больше битов не используются вообще, т.е. уже сейчас количество регистров можно уменьшить, но этого не делают. А если они станут 64-битные, то вместо двух регистров настройки, например у GPIO CRH и CRL (F10x) будет один на весь порт. Ну это я может утрирую, обобщаю, но смысл в том, что увеличение разрядности не увеличивает число регистров.

21 час назад, Электронщик сказал:

включаю свою функцию инициализации ЮАРТ, но при этом ЮАРТ перестает работать 


void USART1_UART_Init(){
 
USART1->BRR=0x30; //BaudRate 250000
USART1->CR1 |= USART_CR1_UE; //Разрешаем работу USART1
USART1->CR1 |= USART_CR1_TE; //Включаем передатчик
}

 

Вы не включили тактирование: RCC->APB2ENR |= RCC_APB2ENR_USART1EN;

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

Zhuk72 регистров может и станет меньше, только вот их разрядность будет тогда 32 бита, а это по сути тоже самое, каждый бит же не запомнишь, и опять же пока в них разберешься, по сути тоже самое.

А тактирование включено должно быть в HAL для проца и шин перефирии и эту строчку вставлял не работало, ну попробую позже опять

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

Зачем запоминать? Заглянули в RM - написали. Если ранее делали, то копируете из старого проекта в новый.

А регистры и сейчас имеют разную разрядность: 8, 16 и 32.

Тактирование включается отдельно для каждого "куска" МК: каждый порт, каждый таймер, каждая периферия - для всего по отдельности.

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

Да включено оно я же кубом делал, у меня в коде есть частота тактирования проца и всех шин в отдельной функции HAL? djn djn fnr djn ghjgbcfyj? z levf. jyj e;t nen drk.xtyj

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

/** System Clock Configuration
*/
void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

    /**Initializes the CPU, AHB and APB busses clocks 
    */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    /**Initializes the CPU, AHB and APB busses clocks 
    */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    /**Configure the Systick interrupt time 
    */
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

    /**Configure the Systick 
    */
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  /* SysTick_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

 

 

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

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

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

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

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

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

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

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

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

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

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

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