|
Как я накололся с 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 13 2014, 13:35
|

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

|
Для STM32F100, 103. Такты задаю раньше, одной командой для всех устройств. CODE /*! Port bit configuration table */ typedef enum { IN_ANAL, GO_PP10, GO_PP02, GO_PP50, // Input Analog, GP Output Push-pull 10-2-50MHz IN_FLOA, GO_OD10, GO_OD02, GO_OD50, // Input Float*, GP Output Open-drain 10-2-50MHz IN_PDPU, AO_PP10, AO_PP02, AO_PP50, // Input Pull-down/Pull-up, Alt Func Push-pull CM_NONE, AO_OD10, AO_OD02, AO_OD50 // none(illegal), Alt Func Open-drain 10-2-50MHz } CONF_MODE;
/*!**************************************************************************** * @brief Port Low/High byte configuration @details Конфигурация байтов порта целиком @param PORT - имя порта (A..G) @param CM00..CM15 - конфигурация битов 0..15 @note Используется перечисляемый тип CONF_MODE @note Для IN_PDPU нужный pull-down/pull-up задается в ODR */ #define GPIO_CONF(PORT, \ CM00, CM01, CM02, CM03, \ CM04, CM05, CM06, CM07, \ CM08, CM09, CM10, CM11, \ CM12, CM13, CM14, CM15); \ GPIO##PORT->CRL = ((uint32_t) \ CM00 << 0 | CM01 << 4 | CM02 << 8 | CM03 << 12 | \ CM04 << 16 | CM05 << 20 | CM06 << 24 | CM07 << 28); \ GPIO##PORT->CRH = ((uint32_t) \ CM08 << 0 | CM09 << 4 | CM10 << 8 | CM11 << 12 | \ CM12 << 16 | CM13 << 20 | CM14 << 24 | CM15 << 28); #define GPIO_CONFL(PORT, \ CM00, CM01, CM02, CM03, \ CM04, CM05, CM06, CM07); \ GPIO##PORT->CRL = ((uint32_t) \ CM00 << 0 | CM01 << 4 | CM02 << 8 | CM03 << 12 | \ CM04 << 16 | CM05 << 20 | CM06 << 24 | CM07 << 28);
#define GPIO_CONFH(PORT, \ CM08, CM09, CM10, CM11, \ CM12, CM13, CM14, CM15); \ GPIO##PORT->CRH = ((uint32_t) \ CM08 << 0 | CM09 << 4 | CM10 << 8 | CM11 << 12 | \ CM12 << 16 | CM13 << 20 | CM14 << 24 | CM15 << 28);
/*!**************************************************************************** * @brief Bit of Low/High byte Port configuration @details Конфигурация одиночного бита порта @param PORT - имя порта (A..G) @param BIT - номер бита (0..15) @param CM - конфигурация бита @note Используется перечисляемый тип CONF_MODE @note Для IN_PDPU нужный pull-down/pull-up задается в ODR */ #define GPIO_CONFB(PORT, BIT, CM) \ *(uint32_t *)((uint32_t)(GPIO##PORT) + BIT / 8 * 4) = \ *(uint32_t *)((uint32_t)(GPIO##PORT) + BIT / 8 * 4) \ & (~(0xF << (BIT % 8) * 4)) | (CM << (BIT % 8) * 4)
/* GPIO */ GPIO_CONF(A, IN_FLOA, IN_FLOA, IN_FLOA, IN_FLOA, // User_Key, _ , _ , _ IN_ANAL, IN_ANAL, IN_FLOA, IN_FLOA, // DAC-1, DAC-2, _ , _ AO_PP50, IN_FLOA, IN_FLOA, IN_FLOA, // MCO, _ , _ , _ , _ IN_FLOA, IN_FLOA, IN_FLOA, IN_FLOA);
А вот листинг Код ;;;371 /* GPIO */ ;;;372 GPIO_CONF(A, 00000e 49e1 LDR r1,|L1.916| 000010 48df LDR r0,|L1.912| 000012 6008 STR r0,[r1,#0] 000014 1d09 ADDS r1,r1,#4 000016 48e0 LDR r0,|L1.920| 000018 6008 STR r0,[r1,#0] ;;;373 IN_FLOA, IN_FLOA, IN_FLOA, IN_FLOA, // User_Key, _ , _ , _ ;;;374 IN_ANAL, IN_ANAL, IN_FLOA, IN_FLOA, // DAC-1, DAC-2, _ , _ ;;;375 AO_PP50, IN_FLOA, IN_FLOA, IN_FLOA, // MCO, _ , _ , _ , _ ;;;376 IN_FLOA, IN_FLOA, IN_FLOA, IN_FLOA);
|
|
|
|
|
Feb 14 2014, 11:20
|
Участник

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

|
Цитата(ViKo @ Feb 13 2014, 17:35)  Для STM32F100, 103. Такты задаю раньше, одной командой для всех устройств. /*! Port bit configuration table */ typedef enum {... В принципе, нормально. Только может значения CONF_MODE переименовать, чтобы было понятнее? А то IN_ANAL как-то режет глаз  Да и AO_PP02 менее понятно, чем GPIO_Speed_50MHz. Иногда, в проекте под каждый датчик/исполнительное устройство есть отдельный файл, а то и несколько. Как в этом случае задавать настройки: какие порты и другие ресурсы контроллера будут использоваться этим датчиком? Если это делать в заголовочном (*.h) файле самого датчика, то иногда возникают ситуации, когда одни и те же ресурсы используются одновременно несколькими устройствами. Меня подмывает перенести все дефайны распределения ресурсов в один заголовочный файл. Стоит так делать? Может есть что-нибудь вроде "Best practices in embedded systems programming" для начинающих? Посоветуйте.
|
|
|
|
Сообщений в этой теме
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 A. Fig Lee А зачем все это?
Я сразу беру main() и поехал.
Вр... Feb 9 2014, 14:13 ViKo Цитата(A. Fig Lee @ Feb 9 2014, 17:13) А ... Feb 9 2014, 14:57  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  Boriska Цитата(ViKo @ Feb 9 2014, 18:57) В библио... Feb 12 2014, 14:00   ViKo Цитата(Boriska @ Feb 12 2014, 17:00) А мо... Feb 12 2014, 14:08    mantech Цитата(ViKo @ Feb 12 2014, 18:08) RCC-... Feb 12 2014, 17:27     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 Falkon_99 от стандартных CMSIS предпочитаю не отказыватся, т... Feb 14 2014, 09:31  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
|
|
|