вопрос: #include <stm32f10x_lib.h> - значит где должна быть библиотека? В проекте или в попках самого Кейла? ну и естественно "source\STM32_init\STM32_Init.c(31): error: #5: cannot open source input file "stm32f10x_lib.h": No such file or directory" хотя компилю проекты дружелюбно предоствлены Уважаемым Aheir'a (http://radiokot.ru/articles/43/)
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_lib.h у меня. Перед включением нужно удалить заголовочные файлы в конфиге, иначе кричит на переопределение типов.
Подскажите где почитать про С для IAR - в частнсти объявление переменных во flash, eeprom итд т.е. зарезервированные слова и и х использование... В хелпе чото ничего нету... или не так ищу.
т.е. для avr я писал flash uint8_t P; - а тут как? __flash не пашет... Хотя везде вроде так советуют...
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
Добавлено: Сб апр 07, 2012 12:56:05
Друг Кота
Карма: 26
Рейтинг сообщений: 108
Зарегистрирован: Чт ноя 04, 2010 01:56:36 Сообщений: 7439 Откуда: г. Москва
Рейтинг сообщения:0
demiurg301 писал(а):
В хелпе чото ничего нету... или не так ищу.
Видимо
Цитата:
т.е. для avr я писал flash uint8_t P; - а тут как? __flash не пашет... Хотя везде вроде так советуют...
Объяви их как const - линкер сам разберется, во флеш засунет.
В кортекс-м3 фон нейманская архитектуры, в отличии от гарварда в АВР, тут работа с находящемся во флеше идет на равных с озу, никаких спец изысканий и специнструкций не надо.
В кортекс-м3 фон нейманская архитектуры, в отличии от гарварда в АВР, тут работа с находящемся во флеше идет на равных с озу, никаких спец изысканий и специнструкций не надо.
Ну про архитектуру понятно. C объявлением не понятно. а как быть с eeprom?
Люди, читал и читаю статьи о "быстром" старте с СТМ32, всё хорошо... кроме кода. Объясните, в чем хитрость такой сложности (на мой взгляд) команд к примеру: GPIOC->BSRR = GPIO_BSRR_BS8; неужели что-то типа GPIO.08=1; не была бы читабельней? Вопрос к знатокам: нафига такое городить? И бывает-ли проще (типа примера, что я привел)? Если да, то в где прочитать?
ткните носом где прочитать, что такое GPIO_BSRR_BS8 или RCC_APB2ENR_AFIOEN, даже не что такое, а где оно документировано? Ну не с неба же люди эти записи берут! просто я не понимаю логики таких длиннючевытянутозакрученнных команд для простых действий! Где смысл?
почему ADC1->CR2 |= ADC_CR2_ADON; , а не ADC1_CR2.ADON=1? зачем поразрядное ИЛИ? нельзя сразу на бит ориентироваться? _______________ PS: еще вот что не спросил: может кто сталкивался с бумажными изданиями по СТМ32 - посоветуйте толковую книжку. Бумага есть бумага!
Насколько я успел понять, BSRR - регистр для побитного управления портом, а GPIO_BSRR_BS8 - маска, позволяющая изменить только нужный бит, не трогая остальные. Если посмотреть в стандартной библиотеке gpio, там все эти маски описаны. GPIOC->BSRR - вроде бы это называется структурой, и уже не имеет непосредственного отношения к STM, а есть в Си. Я не вникал в тонкости, но в целом тут вроде бы происходит обращение к регистру BSRR порта С.
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
Добавлено: Пн апр 16, 2012 09:36:17
Друг Кота
Карма: 26
Рейтинг сообщений: 108
Зарегистрирован: Чт ноя 04, 2010 01:56:36 Сообщений: 7439 Откуда: г. Москва
Рейтинг сообщения:0
mvm писал(а):
неужели что-то типа GPIO.08=1; не была бы читабельней? Вопрос к знатокам: нафига такое городить? И бывает-ли проще (типа примера, что я привел)? Если да, то в где прочитать?
1. синтаксис Си не допускает имен переменных, начинающихся с цифры 2. не нравится такая модель представления ? сделай удобную себе, если не лениво. на железо это никак не завязано, за всеми этими структырами стоят все те же регистры.
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
Добавлено: Пн апр 16, 2012 09:39:29
Друг Кота
Карма: 26
Рейтинг сообщений: 108
Зарегистрирован: Чт ноя 04, 2010 01:56:36 Сообщений: 7439 Откуда: г. Москва
Рейтинг сообщения:0
mvm писал(а):
ткните носом где прочитать, что такое GPIO_BSRR_BS8 или RCC_APB2ENR_AFIOEN, даже не что такое, а где оно документировано? Ну не с неба же люди эти записи берут!
В инклюде, через которой у тебя подставляется реальное значение Люди делают такие дефайны и называют их как у них принято/как им удобно. Это лишь библиотека для работы с железом, а не само железо. В какой документации ты ищещь описание этих дефайнов ?
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
Добавлено: Пн апр 16, 2012 11:11:54
Друг Кота
Карма: 26
Рейтинг сообщений: 108
Зарегистрирован: Чт ноя 04, 2010 01:56:36 Сообщений: 7439 Откуда: г. Москва
Рейтинг сообщения:0
насчет eeprom. в STM32Fxxx есть же еще backup SRAM, работающий на крошечной батарейке несколько лет или некоторое время (думаю, недели - легко) от ионистора.
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
Добавлено: Пн апр 16, 2012 11:36:00
Друг Кота
Карма: 26
Рейтинг сообщений: 108
Зарегистрирован: Чт ноя 04, 2010 01:56:36 Сообщений: 7439 Откуда: г. Москва
Рейтинг сообщения:0
qwerky писал(а):
Satyr писал(а):
Работать куда гибче, шустрее, ресурс выше
для конфига хватит и страницы обычного флеша. А если и не хватит - тем лучше, клиент быстрее прибежит за ремонтом/заменой
Конечно хватит ,ведь она куда больше, чем еепром или бакап срам. Да вот ведь незадача - в тех же stm32f2xx самая мелкая страница флеша - это 16кб и стирается только целиком Ну, я в своей задаче тоже откусил от 128кб страницу в 16кб для сохранения ~200 байт данных, которые еще и переписываются не целиком, но довольно часто
А чтоб более менее красиво, надежно и вобще, по уму, реализовать эмуляцию nvram надо 2 страницы.
для сохранения ~200 байт данных, которые еще и переписываются не целиком, но довольно часто
страницу еще можно поделить на куски равные размеру конфига, и выровненные по 4байтам, тогда можно стирать по заполнению всех кусков - количество циклов перезаписи сразу увеличится как для реального EEPROM.
//read last valid configuration from EEPROM U8 config_read(void) { if (config_record == 0xFFFF) { config_clear(); return 0; } else { config = *CONFIG_RECORD_ADDR(config_record); return 1; } }
//write config to next record void config_write(void) { config.crc = config_calc_crc(&config); FLASH_Unlock(); config_record++; if (config_record >= CONFIG_RECORDS) { config_record = 0; FLASH_ErasePage(CONFIG_START_ADDR); } U32 *source_addr = (void *)&config; U32 *dest_addr = (void *)CONFIG_RECORD_ADDR(config_record); for (U16 i=0; i<CONFIG_WORDS; i++) { FLASH_ProgramWord((U32 )dest_addr, *source_addr); source_addr++; dest_addr++; } FLASH_Lock(); }
void setup_config(void) { config_record = config_last_record(); //find last record config_read(); //read last record }
Вот не знаю что делать если размер конфига приближается к размеру страницы Flash... И прибором пользуются каждый день, то есть несколько десятков перезаписей в день. Хватит максимум на год-два. Пришел к мнению забить - мне проще раз в год заменить плату контроллера, и еще немного заработать при этом.
Сейчас этот форум просматривают: Phyxick и гости: 7
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения