[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3898534#p3898534"]И по поводу АЦП и ЮСБ, тоже надо сразу частоты на них выставлять?[/uquote]Можно по сто раз дрюкать идин и тот же регистр, а можно сразу записать правильные параметры.
STM32 новичку в ARM что к чему
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
Нет никакого лучше/хуже. Есть как правильно в каждом конкретном случае.
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3898534#p3898534"]И по поводу АЦП и ЮСБ, тоже надо сразу частоты на них выставлять?[/uquote]Можно по сто раз дрюкать идин и тот же регистр, а можно сразу записать правильные параметры.
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3898534#p3898534"]И по поводу АЦП и ЮСБ, тоже надо сразу частоты на них выставлять?[/uquote]Можно по сто раз дрюкать идин и тот же регистр, а можно сразу записать правильные параметры.
- Реклама
Добавлено after 52 seconds:
В случае инициализации внешнего тактитрования от кварца? Как пример выше?
Станислав
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3898546#p3898546"]Как пример выше?[/uquote]Есть сомнения, что я правильный пример выложил?
я не совсем понимаю, откуда там вот такие штучки:
_VAL2FLD(RCC_CR_HSITRIM, 16), что они обозначают, т.к. я их не нашел в хидере....
_VAL2FLD(RCC_CR_HSITRIM, 16), что они обозначают, т.к. я их не нашел в хидере....
Станислав
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3898558#p3898558"]_VAL2FLD(RCC_CR_HSITRIM, 16), что они обозначают,[/uquote]Это макрос из CMSIS. Не знаю ни одной IDE, где по ПКМ не было бы "показать/перейти к определению".
- Реклама
Вот втупляю все равно....
Например, вот такое выражение. Довольно простое.
RCC->AHBENR|=RCC_AHBENR_GPIOCEN;
Если из структуры я выдрал название регистра (его адрес) вот этой конструкцией:
RCC->AHBENR
А вот эта часть - это же объявление бита регистра? RCC_AHBENR_GPIOCEN
т.е. по сути название регистра и название его бита?
Тогда почему такая конструкция?
Должно же быть что-то типа такого:
RCC->AHBENR|=(1<<RCC_AHBENR_GPIOCEN);
Это для установки бита, а для сброса тоже самое, но:
RCC->AHBENR &=~(1<<RCC_AHBENR_GPIOCEN);
P/S/ А вот это я понимаю, что просто не заморачиваясь присвоение регистру типа "магического числа", только используя названия этих битов?
RCC->AHBENR=RCC_AHBENR_GPIOCEN;
Что равносильно примерно этому:
RCC->AHBENR=0х00000100;
Например, вот такое выражение. Довольно простое.
RCC->AHBENR|=RCC_AHBENR_GPIOCEN;
Если из структуры я выдрал название регистра (его адрес) вот этой конструкцией:
RCC->AHBENR
А вот эта часть - это же объявление бита регистра? RCC_AHBENR_GPIOCEN
т.е. по сути название регистра и название его бита?
Тогда почему такая конструкция?
Должно же быть что-то типа такого:
RCC->AHBENR|=(1<<RCC_AHBENR_GPIOCEN);
Это для установки бита, а для сброса тоже самое, но:
RCC->AHBENR &=~(1<<RCC_AHBENR_GPIOCEN);
P/S/ А вот это я понимаю, что просто не заморачиваясь присвоение регистру типа "магического числа", только используя названия этих битов?
RCC->AHBENR=RCC_AHBENR_GPIOCEN;
Что равносильно примерно этому:
RCC->AHBENR=0х00000100;
Станислав
RCC_AHBENR_GPIOCEN уже включает 1<<pos
Я про них смотрю, что выглядит так:
Нету у мня тут (1<<pos)
Как я понимаю, у меня в хидере просто объявлено название бита, которому присвоено 16 битное число, которое равно 1. И 16 бит, потому что обращается (относится) только к младшей половине регистра...
Поэтому и недопонимаю. )
Добавлено after 17 minutes 38 seconds:
Прошу прощения, но я помню, что на АВР писал именно подобное (1<<PIN2) и т.д. Оттуда это осталось. Можно было значит и в АВР писать также не заморачиваясь?
Код: Выделить всё
/****************** Bit definition for RCC_AHBENR register ******************/
#define RCC_AHBENR_DMA1EN ((uint16_t)0x0001) /*!< DMA1 clock enable */Как я понимаю, у меня в хидере просто объявлено название бита, которому присвоено 16 битное число, которое равно 1. И 16 бит, потому что обращается (относится) только к младшей половине регистра...
Поэтому и недопонимаю. )
Добавлено after 17 minutes 38 seconds:
Прошу прощения, но я помню, что на АВР писал именно подобное (1<<PIN2) и т.д. Оттуда это осталось. Можно было значит и в АВР писать также не заморачиваясь?
Станислав
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3898946#p3898946"]Нету у мня тут (1<<pos)[/uquote]Даже при pos равном нулю? 
Добавлено after 4 minutes 8 seconds:
Где, вы, кстати, такой заголовочный файл нашли? Сейчас это всё вот так объявляется
Добавлено after 4 minutes 8 seconds:
Где, вы, кстати, такой заголовочный файл нашли? Сейчас это всё вот так объявляется
Код: Выделить всё
/****************** Bit definition for RCC_AHBENR register ******************/
#define RCC_AHBENR_DMA1EN_Pos (0U)
#define RCC_AHBENR_DMA1EN_Msk (0x1U << RCC_AHBENR_DMA1EN_Pos) /*!< 0x00000001 */
#define RCC_AHBENR_DMA1EN RCC_AHBENR_DMA1EN_Msk /*!< DMA1 clock enable */
#define RCC_AHBENR_SRAMEN_Pos (2U)
#define RCC_AHBENR_SRAMEN_Msk (0x1U << RCC_AHBENR_SRAMEN_Pos) /*!< 0x00000004 */
#define RCC_AHBENR_SRAMEN RCC_AHBENR_SRAMEN_Msk /*!< SRAM interface clock enable */
#define RCC_AHBENR_FLITFEN_Pos (4U)
#define RCC_AHBENR_FLITFEN_Msk (0x1U << RCC_AHBENR_FLITFEN_Pos) /*!< 0x00000010 */
#define RCC_AHBENR_FLITFEN RCC_AHBENR_FLITFEN_Msk /*!< FLITF clock enable */
#define RCC_AHBENR_CRCEN_Pos (6U)
#define RCC_AHBENR_CRCEN_Msk (0x1U << RCC_AHBENR_CRCEN_Pos) /*!< 0x00000040 */
#define RCC_AHBENR_CRCEN RCC_AHBENR_CRCEN_Msk /*!< CRC clock enable */
Тогда совсем запутали...
Можно более развернуто ткнуть носом?
Добавлено after 4 minutes 57 seconds:
В самом Кейле нашел...... версии 5.18а Вот с таким названием: stm32f10x.h
Добавлено after 1 minute 38 seconds:
И что-то я начал подозревать, почему у нас разное понимание... т.к. в разные файлы смотрим...
Станислав
Вы в какой среде программирования пишете?
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Кейл. ) Бесплатно до 32 кБайт. Пока хватит.
Добавлено after 14 minutes 35 seconds:
А можете, пожалуйста свой заголовочный кинуть.. А то у меня в Яндексе выдает такой же. А регистрацию свою на СТ я не помню логин и пароль. (((
Добавлено after 15 minutes 29 seconds:
Все. Пароль вспомнил... Файл скачал... Похоже для Ф103 он одинаковый.... как и есть у меня.
Добавлено after 14 minutes 35 seconds:
А можете, пожалуйста свой заголовочный кинуть.. А то у меня в Яндексе выдает такой же. А регистрацию свою на СТ я не помню логин и пароль. (((
Добавлено after 15 minutes 29 seconds:
Все. Пароль вспомнил... Файл скачал... Похоже для Ф103 он одинаковый.... как и есть у меня.
Станислав
Не нужно ничего ставить вручную, поэтому я спросил об IDE.
Жмите Project -> Manage -> Pack installer (его иконка имеется и на тулбаре).
Откроется окно, в котором слева выбираете свой бренд и МК, пусть будет F103. Затем на правой половине окна кликаете Install на Keil::STM32F1xx_DFP и чуть ниже на ARM::CMSIS.
И так для всех семейств МК, которые планируете использовать.
После установки (внизу проследите), закрываете это окно, среда перезагрузится. Все, можно пользоваться.
Периодически можете заглядывать туда на предмет обновлений.
А чтобы посмотреть на всякие разные RCC_AHBENR_DMA1EN, в коде кликаете по ним ПКМ и выбираете Go To Definition of 'RCC_AHBENR_DMA1EN'.
Жмите Project -> Manage -> Pack installer (его иконка имеется и на тулбаре).
Откроется окно, в котором слева выбираете свой бренд и МК, пусть будет F103. Затем на правой половине окна кликаете Install на Keil::STM32F1xx_DFP и чуть ниже на ARM::CMSIS.
И так для всех семейств МК, которые планируете использовать.
После установки (внизу проследите), закрываете это окно, среда перезагрузится. Все, можно пользоваться.
Периодически можете заглядывать туда на предмет обновлений.
А чтобы посмотреть на всякие разные RCC_AHBENR_DMA1EN, в коде кликаете по ним ПКМ и выбираете Go To Definition of 'RCC_AHBENR_DMA1EN'.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Не совсем понятно по правой части окна... У меня оттуда почти все установлено.... А Ап ту дэйт не дает сделать. Самое новое про КМСИС от 2018 года.
Добавлено after 3 minutes 37 seconds:
"А чтобы посмотреть на всякие разные RCC_AHBENR_DMA1EN, в коде кликаете по ним ПКМ и выбираете Go To Definition of 'RCC_AHBENR_DMA1EN'."
Это да. Так и делаю. )))
Добавлено after 3 minutes 37 seconds:
"А чтобы посмотреть на всякие разные RCC_AHBENR_DMA1EN, в коде кликаете по ним ПКМ и выбираете Go To Definition of 'RCC_AHBENR_DMA1EN'."
Это да. Так и делаю. )))
Станислав
Если написано Up to date, значит у вас установлена последняя версия.
Если имеется обновление для установленного, то на кнопке пишется Update.
Если имеется обновление для установленного, то на кнопке пишется Update.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Вот. Я так и понял, что нового заголовочного файла можно не ждать. ) И таких объявлений, как есть для других МК у меня не будет. Значит писать биты надо как я и предполагаю.
типа (1<<название бита)
Добавлено after 10 minutes 11 seconds:
Ой.. не... это не понятное название битов.... ((((
Добавлено after 1 minute 4 seconds:
В файле именно числа, которые записываются...
Вот кусок:
Если я его сравниваю с регистром в РМ, то нулевой и первый бит у меня это все SW. И по сути объявления битов - это видно, что числа, а не названия битов... Хотя, последние два можно отнести к названиям битов. А первый сразу записывает единицы в оба бита SW...
Что-то я совсем путаюсь...
Добавлено after 15 minutes 52 seconds:
Короче, как я понял.... Это не объявления как названия битов. Это объявления сразу с тем, что надо записать в указанные биты, чтобы это заработало...
Типа того?
З.Ы. и писать тогда я могу так:
RCC->CFGR |= (1<<RCC_CFGR_SW_1 ); // наложить маску
либо
RCC->CFGR |= RCC_CFGR_SW_PLL; // наложить маску
либо
RCC->CFGR = RCC_CFGR_SW_PLL; // тупо присвоить, затерев все другие биты
И все будет работать?
типа (1<<название бита)
Добавлено after 10 minutes 11 seconds:
Ой.. не... это не понятное название битов.... ((((
Добавлено after 1 minute 4 seconds:
В файле именно числа, которые записываются...
Вот кусок:
Код: Выделить всё
/******************* Bit definition for RCC_CFGR register *******************/
/*!< SW configuration */
#define RCC_CFGR_SW ((uint32_t)0x00000003) /*!< SW[1:0] bits (System clock Switch) */
#define RCC_CFGR_SW_0 ((uint32_t)0x00000001) /*!< Bit 0 */
#define RCC_CFGR_SW_1 ((uint32_t)0x00000002) /*!< Bit 1 */
#define RCC_CFGR_SW_HSI ((uint32_t)0x00000000) /*!< HSI selected as system clock */
#define RCC_CFGR_SW_HSE ((uint32_t)0x00000001) /*!< HSE selected as system clock */
#define RCC_CFGR_SW_PLL ((uint32_t)0x00000002) /*!< PLL selected as system clock */
Что-то я совсем путаюсь...
Добавлено after 15 minutes 52 seconds:
Короче, как я понял.... Это не объявления как названия битов. Это объявления сразу с тем, что надо записать в указанные биты, чтобы это заработало...
Типа того?
З.Ы. и писать тогда я могу так:
RCC->CFGR |= (1<<RCC_CFGR_SW_1 ); // наложить маску
либо
RCC->CFGR |= RCC_CFGR_SW_PLL; // наложить маску
либо
RCC->CFGR = RCC_CFGR_SW_PLL; // тупо присвоить, затерев все другие биты
И все будет работать?
Станислав
нет так неверно, потому что 2<<0 уже часть RCC_CFGR_SW_1, больше сдвигов не нужно.СКАЗОЧНИК писал(а):З.Ы. и писать тогда я могу так:
RCC->CFGR |= (1<<RCC_CFGR_SW_1 );
RCC_CFGR_SW_0 - 0 бит
RCC_CFGR_SW_1 - 1 бит
Имеет два бита поле. добавляете те биты которые нужны согласно референсу.
RCC->CFGR |= RCC_CFGR_SW_1; //10: PLL selected as system clock
или RCC->CFGR |= RCC_CFGR_SW_PLL;
RCC->CFGR |= RCC_CFGR_SW_0; //01: HSE selected as system clock
или RCC->CFGR |= RCC_CFGR_SW_HSE;
AHBENR не управляет включением тактирования порта C.
Чтобы включить GPIOC тактирование:
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
RCC_CFGR_SW_1 - 1 бит
Имеет два бита поле. добавляете те биты которые нужны согласно референсу.
RCC->CFGR |= RCC_CFGR_SW_1; //10: PLL selected as system clock
или RCC->CFGR |= RCC_CFGR_SW_PLL;
RCC->CFGR |= RCC_CFGR_SW_0; //01: HSE selected as system clock
или RCC->CFGR |= RCC_CFGR_SW_HSE;
Код: Выделить всё
Bits 1:0 SW[1:0]: System clock Switch
Set and cleared by softwareto select SYSCLK source.
Set by hardware to force HSI selection when leaving Stop and Standby mode or in case of failure of
the HSE oscillator used directly or indirectly as system clock (if the Clock Security System is
enabled).
00: HSI selected as system clock
01: HSE selected as system clock
10: PLL selected as system clock
11: Not allowed
Чтобы включить GPIOC тактирование:
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 7048
- Зарегистрирован: Сб янв 28, 2006 22:47:24
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3898938#p3898938"]Вот втупляю все равно....[/uquote]
Экспериментировать с присвоением значений битам удобно наблюдая состояние этих битов в регистрах. В режиме отладки в главном меню IAR жмем Viev-Registers. Правым щелчком мыши по открывшемуся окну выбираем нужную группу регистров и смотрим, к чему приводит использование всех этих |=, & и << в тексте программы. В Кейле тоже должно быть, не может не быть.
Экспериментировать с присвоением значений битам удобно наблюдая состояние этих битов в регистрах. В режиме отладки в главном меню IAR жмем Viev-Registers. Правым щелчком мыши по открывшемуся окну выбираем нужную группу регистров и смотрим, к чему приводит использование всех этих |=, & и << в тексте программы. В Кейле тоже должно быть, не может не быть.
Астролябия-сама меряет, было бы что мерять!!!


