|
Как я накололся с stm32f10x.h, врагу не пожелаю |
|
|
|
Feb 9 2014, 09:29
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Cоздаю свои SystemInit функции (как и все остальные, по мере понимания). Очередная - не работает! Процессор вылетает неизвестно куда, в фаулты, даже до обработчика HardFault не добирается! В Кейле, в отладчике, на реальной плате вижу. Хотя предыдущая функция (в том же файле была, повезло) - работает. Ищу отличия - не нахожу! Смотрю в отладчике - все биты RCC одинаковые. Там с десяток выражений, что только не сравниваю, заменяю, комментирую - везде одинаково. Добрался до латентности. В нерабочей: Код /* Задать использовать буфер предвыборки Flash, 2 цикла ожидания */ FLASH->ACR = FLASH_ACR_LATENCY_0 * 2 | // LATENCY[2:0] bits (Latency) FLASH_ACR_HLFCYA * 0 | // Flash Half Cycle Access Enable FLASH_ACR_PRFTBE * 1; // Prefetch Buffer Enable В рабочей: Код /* Задать использовать буфер предвыборки Flash и 2 цикла ожидания (half cycle access can only be used with a low-frequency clock of less than 8 MHz that can be obtained with the use of HSI or HSE but not of PLL) */ FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY_1; // 2 WS Смотрю в stm32f10x.h. А там биты заданы так: Код #define FLASH_ACR_LATENCY ((uint8_t)0x03) /*!< LATENCY[2:0] bits (Latency) */ #define FLASH_ACR_LATENCY_0 ((uint8_t)0x00) /*!< Bit 0 */ #define FLASH_ACR_LATENCY_1 ((uint8_t)0x01) /*!< Bit 0 */ #define FLASH_ACR_LATENCY_2 ((uint8_t)0x02) То есть, не так, как везде, описываются именно биты, как, например: Код #define RCC_CFGR_PLLMULL_0 ((uint32_t)0x00040000) а состояния латентности. В результате, латентность у меня не устанавливалась, доступ к памяти сбоил. Когда задал Код FLASH->ACR = FLASH_ACR_LATENCY_2 | // LATENCY[2:0] bits (Latency) FLASH_ACR_HLFCYA * 0 | // Flash Half Cycle Access Enable FLASH_ACR_PRFTBE * 1; // Prefetch Buffer Enable все заработало. Что интересно, и вторая функция была с неправильной установкой латентности = 1, но, тем не менее каким-то чудом работала. На 72 MHz, STM32F103. Уже чешутся руки взяться за правку stm32f10x.h, но боюсь запутаться между проектами.
|
|
|
|
|
 |
Ответов
|
Feb 12 2014, 14:00
|
Участник

Группа: Участник
Сообщений: 65
Регистрация: 28-11-07
Пользователь №: 32 772

|
Цитата(ViKo @ Feb 9 2014, 18:57)  В библиотеку не хожу. Не хочу пользоваться. У меня - просто, понятно... А можно взглянуть на одну какую-нибудь Вашу процедурку, чтобы, так сказать, оценить преимущества подхода?
|
|
|
|
|
Feb 12 2014, 14:08
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(Boriska @ Feb 12 2014, 17:00)  А можно взглянуть на одну какую-нибудь Вашу процедурку, чтобы, так сказать, оценить преимущества подхода? Преимуществ особых нет, просто я имею представление о том, что хочу сделать. CODE /*!**************************************************************************** * @brief System Clock STM32F100RBT6B initialize @details Установить тактовую частоту 24MHz @param @return @note Вызывается в startup.s */ void SystemInit(void) {
/* Задать начальное состояние (как после сброса) */ RCC->CR = 0x00000083; // HSI On, HSITRIM = 0x80 RCC->CFGR = 0x00000000; // HSI oscillator used as system clock RCC->CIR = 0x001F0000; // Reset and disable all interrupts
/* Включить HSE генератор Счетчик таймаута старта HSE генератора, загружается числом из stm32f10x.h Ждать готовности генератора или окончания таймаута */ uint32_t StartCount = HSE_STARTUP_TIMEOUT; RCC->CR |= RCC_CR_HSEON; while (--StartCount && !(RCC->CR & RCC_CR_HSERDY)) { } /* Если HSE генератор включился (таймаут не вышел) */ if (StartCount) {
/* Конфигурировать SYSCLK, HCLK, PCLK2, PCLK1, ADCPRE Задать коэффициенты деления частоты */ RCC->CFGR = RCC_CFGR_SW_0 * 0 | // SW[1:0] bits (System clock Switch): HSI RCC_CFGR_HPRE_0 * 0 | // HPRE[3:0] bits (AHB prescaler): SYSCLK / 1 = 24 MHz (max) RCC_CFGR_PPRE1_0 * 0 | // PRE1[2:0] bits (APB1 prescaler): HCLK / 1 = 24 MHz (max) RCC_CFGR_PPRE2_0 * 0 | // PRE2[2:0] bits (APB2 prescaler): HCLK / 1 = 24 MHz RCC_CFGR_ADCPRE_0 * 0 | // ADCPRE[1:0] bits (ADC prescaler): PCLK2 / 2 = 12 MHz (max) RCC_CFGR_PLLSRC * 1 | // PLL entry clock source: PREDIV1 RCC_CFGR_PLLXTPRE * 1 | // HSE divider for PLL entry: / 2 (4 MHz) RCC_CFGR_PLLMULL_0 * 4 | // PLLMUL[3:0] bits (PLL multiplication factor): * 6 = 24 MHz RCC_CFGR_MCO_0 * 7 ; // MCO[2:0] bits (Microcontroller Clock Output): PLL / 2 = 12 MHz
/* Пределитель для PLL, не обязательно Младший бит совпадает с RCC_CFGR_PLLXTPRE */ RCC->CFGR2 = RCC_CFGR2_PREDIV1_0 * 1 ; // PREDIV1 input clock divided by 2
/* Включить PLL (и защиту HSE от сбоев, если нужно) Ждать, пока нет готовности PLL */ RCC->CR |= RCC_CR_PLLON * 1 | // PLL enable RCC_CR_CSSON * 1 ; // Clock Security System enable while (!(RCC->CR & RCC_CR_PLLRDY)) { }
/* Выбрать PLL как источник системной частоты Ждать, пока PLL не выберется как источник системной частоты */ RCC->CFGR |= RCC_CFGR_SW_0 * 2 ; // System clock Switch: PLL while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL) { }
/* Выключить внутренний генератор HSI */ RCC->CR &= ~RCC_CR_HSION; } /* Если HSE генератор не запустился, работать от HSI */ }
|
|
|
|
Сообщений в этой теме
ViKo Как я накололся с stm32f10x.h Feb 9 2014, 09:29 SII Так здесь же уже не отдельные биты, а целое битово... Feb 9 2014, 11:21 ViKo Цитата(SII @ Feb 9 2014, 14:21) Так здесь... Feb 9 2014, 11:43  Сергей Борщ Пишу так:
Код2 * (FLASH_ACR_LATENCY & ~FLA... Feb 9 2014, 12:28   ViKo Цитата(Сергей Борщ @ Feb 9 2014, 15:28) П... Feb 9 2014, 12:47    Сергей Борщ Цитата(ViKo @ Feb 9 2014, 14:47) Видимо, ... Feb 9 2014, 17:59  mantech Цитата(ViKo @ Feb 9 2014, 18:57) В библио... Feb 9 2014, 16:09   _Артём_ Цитата(mantech @ Feb 9 2014, 19:09) А что... Feb 9 2014, 19:15    mantech Цитата(_Артём_ @ Feb 9 2014, 23:15) Если ... Feb 10 2014, 12:43     ViKo Цитата(mantech @ Feb 12 2014, 20:27) ... Feb 12 2014, 17:34    Boriska Цитата(ViKo @ Feb 12 2014, 18:08) Преимущ... Feb 13 2014, 05:57 ViKo Еще хотите ужасов? - В stm32f10x.h напрочь отсутст... Feb 10 2014, 09:52 ViKo Плетясь в хвосте у библиописателей, всегда огранич... Feb 10 2014, 12:49 MrYuran Цитата(ViKo @ Feb 10 2014, 16:49) Плетясь... Feb 12 2014, 11:46  kolobok0 Цитата(MrYuran @ Feb 12 2014, 15:46) ..Та... Feb 12 2014, 12:41 ViKo Мелкий аргумент. CppCheck только что выдала замеча... Feb 12 2014, 10:03 mantech Цитата(ViKo @ Feb 12 2014, 14:03) Мелкий ... Feb 12 2014, 11:16  ViKo Цитата(mantech @ Feb 12 2014, 14:16) Вида... Feb 12 2014, 11:21 ViKo Если хотите очевидного, продемонстрируйте инициали... Feb 13 2014, 07:00 Boriska Цитата(ViKo @ Feb 13 2014, 11:00) Если хо... Feb 13 2014, 12:50 ViKo Для STM32F100, 103. Такты задаю раньше, одной кома... Feb 13 2014, 13:35 Falkon_99 от стандартных CMSIS предпочитаю не отказыватся, т... Feb 14 2014, 09:31 Boriska Цитата(ViKo @ Feb 13 2014, 17:35) Для STM... Feb 14 2014, 11:20  ViKo Цитата(Boriska @ Feb 14 2014, 14:20) В пр... Feb 14 2014, 11:25 andrewlekar ЦитатаМеня подмывает перенести все дефайны распред... Feb 17 2014, 05:13 _Pasha libopencm3 как вариант. Feb 17 2014, 06:11
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|