ViKo 1 9 февраля, 2014 Опубликовано 9 февраля, 2014 · Жалоба 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, но боюсь запутаться между проектами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SII 0 9 февраля, 2014 Опубликовано 9 февраля, 2014 · Жалоба Так здесь же уже не отдельные биты, а целое битовое поле (из двух битов). Маска поля -- FLASH_ACR_LATENCY, а остальные три константы -- это его возможные значения для разных случаев жизни (латентностей). ИМХО, тут Вы зря ожидали каких-то "битов", поскольку их тут быть и не должно. Для интереса посмотрите какие-нибудь другие константы, касающиеся полей, а не отдельных битов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 9 февраля, 2014 Опубликовано 9 февраля, 2014 · Жалоба Так здесь же уже не отдельные биты, а целое битовое поле (из двух битов). Маска поля -- FLASH_ACR_LATENCY, а остальные три константы -- это его возможные значения для разных случаев жизни (латентностей). ИМХО, тут Вы зря ожидали каких-то "битов", поскольку их тут быть и не должно. Для интереса посмотрите какие-нибудь другие константы, касающиеся полей, а не отдельных битов. Найдите подобное еще где-либо в stm32f10x.h. Именно потому, что в большинстве случаев xxx_0, xxx_1 и т.д. описывает биты, так и воспринял эти константы, уже автоматически. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 9 февраля, 2014 Опубликовано 9 февраля, 2014 · Жалоба Пишу так: 2 * (FLASH_ACR_LATENCY & ~FLASH_ACR_LATENCY) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 9 февраля, 2014 Опубликовано 9 февраля, 2014 · Жалоба Пишу так: 2 * (FLASH_ACR_LATENCY & ~FLASH_ACR_LATENCY) Видимо, все же не так. :rolleyes: Сколько на ноль ни умножай... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A. Fig Lee 0 9 февраля, 2014 Опубликовано 9 февраля, 2014 · Жалоба А зачем все это? Я сразу беру main() и поехал. Вроде ж все по дефоулту уже придумано Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 9 февраля, 2014 Опубликовано 9 февраля, 2014 · Жалоба А зачем все это? Я сразу беру main() и поехал. Вроде ж все по дефоулту уже придумано В библиотеку не хожу. Не хочу пользоваться. У меня - просто, понятно... Еще прикол - биты USB_CNTR_FRES и т.д. - описаны, а самой структуры USB в stm32f10x.h - нет! :w00t: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 9 февраля, 2014 Опубликовано 9 февраля, 2014 · Жалоба В библиотеку не хожу. Не хочу пользоваться. У меня - просто, понятно... А что так сразу? Если инициализация в библиотеке есть и она корректно работает, зачем изобретать велосипед? Я понимаю еще либы по USB - там пожалуй реально лучше с нуля писать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 9 февраля, 2014 Опубликовано 9 февраля, 2014 · Жалоба Видимо, все же не так. :rolleyes: Сколько на ноль ни умножай...Да, действительно. Опечатался. 2 * (FLASH_ACR_LATENCY & -FLASH_ACR_LATENCY) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 9 февраля, 2014 Опубликовано 9 февраля, 2014 · Жалоба А что так сразу? Если инициализация в библиотеке есть и она корректно работает, зачем изобретать велосипед?Потому что инициализацию и самому несложно написать. Я понимаю еще либы по USB - там пожалуй реально лучше с нуля писать...Странная логика - всё с ног на голову. Если USB-библиотека работает, то зачем с нуля писать? Разве что подредактировать немного под нужлы проекта самую малость. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 10 февраля, 2014 Опубликовано 10 февраля, 2014 · Жалоба Еще хотите ужасов? - В stm32f10x.h напрочь отсутствуют биты DAC_CR_DMAUDRIE2, DAC_CR_DMAUDRIE1. Интересно, кто занимается коррекцией этих заголовков? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 10 февраля, 2014 Опубликовано 10 февраля, 2014 · Жалоба Если USB-библиотека работает, то зачем с нуля писать? В том-то и дело - не со всеми флешками работает - попробуй разберись, почему? :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 10 февраля, 2014 Опубликовано 10 февраля, 2014 · Жалоба Плетясь в хвосте у библиописателей, всегда ограничиваешься эффективностью этих библиописателей. Там, что, мастера высшего пилотажа работают? Похоже, нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 12 февраля, 2014 Опубликовано 12 февраля, 2014 · Жалоба Мелкий аргумент. CppCheck только что выдала замечание о библиотечной system32f2xx.c: Кратко: Suspicious use of ; at the end of 'while' statement. Сообщение: Suspicious use of ; at the end of 'while' statement. Гляжу, вижу: /* Wait till the main PLL is used as system clock source */ while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); { } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 12 февраля, 2014 Опубликовано 12 февраля, 2014 · Жалоба Мелкий аргумент. CppCheck только что выдала замечание о библиотечной system32f2xx.c: Кратко: Suspicious use of ; at the end of 'while' statement. Сообщение: Suspicious use of ; at the end of 'while' statement. Гляжу, вижу: /* Wait till the main PLL is used as system clock source */ while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); { } Видать "Всемогущие гуру" хотели еще что-нить в скобочках...вписать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться