|
|
  |
STM32 – вопросы – проблемы - решения. |
|
|
|
Apr 17 2011, 16:02
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 7-01-11
Пользователь №: 62 073

|
А с чего он вдруг должен стартовать с 0х800000? Если он знать не знает, что там еще есть кроме ядра, а флеш частью ядра не является. Дело в том как устроен симулятор кейла. Не умеет он симулировать по отдельности. Типа вот тут у нас уарты одинаковые - это я могу, а вот тут что-то другое не могу. Просто симулятор не знает чипа stm32f107 вообще. Потому и ведет себя подобным образом, симулирует только ядро, стартует с 0 и т.д. Если очень хочется, можно заставить симулятор ядра стартовать с 0х800000, да только какой смысл, если можно запустить симулятор как f103 и получить тоже самое + часть периферии, которая у f107 такая же.
|
|
|
|
|
Apr 17 2011, 18:39
|
Знающий
   
Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482

|
QUOTE (akimych @ Apr 17 2011, 22:02)  А с чего он вдруг должен стартовать с 0х800000? Если он знать не знает, что там еще есть кроме ядра, а флеш частью ядра не является. Дело в том как устроен симулятор кейла. Не умеет он симулировать по отдельности. Типа вот тут у нас уарты одинаковые - это я могу, а вот тут что-то другое не могу. Просто симулятор не знает чипа stm32f107 вообще. Потому и ведет себя подобным образом, симулирует только ядро, стартует с 0 и т.д. Если очень хочется, можно заставить симулятор ядра стартовать с 0х800000, да только какой смысл, если можно запустить симулятор как f103 и получить тоже самое + часть периферии, которая у f107 такая же. понятно. жаль конечно, всегда в железе отлаживал уже на заключительном этапе, либо придется симулировать для 103, а в железе уже 107  и это хваленый кейл  интересно когда поддержку 107 в симуляторе планируют?
|
|
|
|
|
Apr 18 2011, 12:40
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 7-01-11
Пользователь №: 62 073

|
Сомневаюсюь, что вообще планируют. F217 уже вроде как добавили, а он позже появился. Так же как и F100 уже давно могли бы добавить, там же различий почти нет с F101. Забавно, что кейл почему-то думает, что у них симулятор поддерживает частично F107. На сайте написано и в настройках симулятора именно F107 выставляется, если его выбрать. С F100 честно пишут, что не поддерживается и в настройках симулятора сразу прописывается симулятор ядра.
|
|
|
|
|
Apr 20 2011, 09:10
|

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

|
В дополнение к разговору о битах, выкладываю свои макрофункции конфигурирования портов STM32 - модификации конфигурации одиночного бита, и записи конфигурации младшего или старшего байта порта целиком. По-моему, простенько (и красиво)... Код /* Port bit configuration table */ typedef enum { IN_ANALG, GPO_PP10, GPO_PP02, GPO_PP50, // Input Analog, GP Output Push-pull 10-2-50MHz IN_FLOAT, GPO_OD10, GPO_OD02, GPO_OD50, // Input Float, GP Output Open-drain 10-2-50MHz IN_PD_PU, AFO_PP10, AFO_PP02, AFO_PP50, // Input Pull-down/Pull-up, Alt Func Push-pull CFG_None, AFO_OD10, AFO_OD02, AFO_OD50 // none(illegal), Alt Func Open-drain 10-2-50MHz } CFG_MODE;
/*! ******************************************************************************* * @brief Port Low/High byte configuration * @details Конфигурация байтов порта целиком * @param PORT - имя порта (A..G) * @param CM15..CM00 - конфигурация битов 15..0 * @return нет * @note Используется перечисляемый тип CFG_MODE * @note Для IN_PD_PU нужный pull-down, pull-up задается в ODR *******************************************************************************/ #define GPIO_PORTL_CFG(PORT,CM07,CM06,CM05,CM04,CM03,CM02,CM01,CM00) \ GPIO##PORT->CRL = (CM07<<28|CM06<<24|CM05<<20|CM04<<16|CM03<<12|CM02<<8|CM01<<4|CM00)
#define GPIO_PORTH_CFG(PORT,CM15,CM14,CM13,CM12,CM11,CM10,CM09,CM08) \ GPIO##PORT->CRH = (CM15<<28|CM14<<24|CM13<<20|CM12<<16|CM11<<12|CM10<<8|CM09<<4|CM08)
/*! ******************************************************************************* * @brief Bit of Low/High byte Port configuration * @details Конфигурация одиночного бита порта * @param PORT - имя порта (A..G) * @param BIT - номер бита (0..15) * @param CM - конфигурация бита * @return нет * @note Используется перечисляемый тип CFG_MODE * @note Для IN_PD_PU нужный pull-down, pull-up задается в ODR *******************************************************************************/ #define GPIO_LBIT_CFG(PORT,BIT,CM) \ GPIO##PORT->CRL = GPIO##PORT->CRL & (~(0xf<<BIT*4)) | (CM<<BIT*4)
#define GPIO_HBIT_CFG(PORT,BIT,CM) \ GPIO##PORT->CRH = GPIO##PORT->CRH & (~(0xf<<(BIT-8)*4)) | (CM<<(BIT-8)*4) Добавлю пример использования Код GPIO_LBIT_CFG(A,0,IN_FLOAT); GPIO_HBIT_CFG(A,8,AFO_PP50); GPIO_PORTL_CFG(B,IN_PD_PU,IN_PD_PU,IN_PD_PU,IN_PD_PU,IN_PD_PU,IN_PD_PU,IN_PD_PU,IN_PD_PU); GPIO_PORTH_CFG(B,GPO_PP10,GPO_PP10,GPO_PP10,GPO_PP10,GPO_PP10,GPO_PP10,GPO_PP10,GPO_PP10);
|
|
|
|
|
Apr 20 2011, 18:03
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
у меня вопрос тупой до безобразия... решил пойти в ногу с прогрессом и освоить ARM наконец-таки. для чего приобрел STM32vldiscovery, как наиболее дешевую платку. Скачал и установил Yagarto, плагин для Eclipse и наэтом подзастрял. во-первых, смотрю в демо-проекты, скачанные с сайта ST, и не могу найти некоторых хидеров. куда они их позасунули? какова вообще структура библиотечных файлов поддержки камней STM32 "от производителя"? может, не стоит ими пользоваться? опыт WinAVR как-то не очень помогает - там все камушки описывались хидерами, лежащими в одной папке, поставляемой с WinAVR, генератор проекта позволял выбрать нужный кристалл - и аллес, на этом подготовка кончалась, оставалось только вспомнить, какая периферия доступна и пользоваться ею. пока что такой аналогии в STM32 не прослеживаю... научите, пожалуйста! во-вторых, если у кого есть опыт работы со всем упомянутым счастьем именно в Eclipse, посоветуйте, что и как там настроить для комфортной работы? Может, есть толковые ссылки по этой теме, плагины какие-то особые? Скачал ARM Eclipse plugin - но, может, это не самое лучшее, что есть? в общем, что-то я в тумане почище ежика... дайте толчок - дальше попробую сам... не смотря на то. что GCC считается кросс-компилятором, для всех таргетов свои фишки, голова пухнет
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Apr 20 2011, 18:51
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(ARV @ Apr 21 2011, 00:03)  в общем, что-то я в тумане почище ежика... дайте толчок - дальше попробую сам... не смотря на то. что GCC считается кросс-компилятором, для всех таргетов свои фишки, голова пухнет  А ибо нефиг пользовать специализированные плагины  Если взять просто эклипс, и делать makefile-based проекты, то работа со всеми поддерживаемыми GCC таргетами практически идентична. Что касаемо примеров от ST, то обычно там лежит их библиотека, по крайней мере во всех, что я видел - лежала. Я лично её не использую, не нравится. Могу порекомендовать примеры от scmRTOS, четвёртый там точно под VL. --- ЗЫ. Ещё вот тут постил пример, он вроде на сях и с ст-шной библиотекой.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Apr 20 2011, 19:34
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(AHTOXA @ Apr 20 2011, 22:51)  А ибо нефиг пользовать специализированные плагины Если взять просто эклипс, и делать makefile-based проекты, то работа со всеми поддерживаемыми GCC таргетами практически идентична. Что касаемо примеров от ST, то обычно там лежит их библиотека, по крайней мере во всех, что я видел - лежала. Я лично её не использую, не нравится. Могу порекомендовать примеры от scmRTOS, четвёртый там точно под VL. --- ЗЫ. Ещё вот тут постил пример, он вроде на сях и с ст-шной библиотекой. во-первых, в примерах ST нет makefile. а сделать его самостоятельно, не имея прочных понятий в новой архитектуре и не будучи знакомым с новым компилятором, я не смогу. во-вторых, если не ST-шная библиотека - то какая альтернатива? где вся ST-шная периферия описана хорошо? не самому же все эти бесчисленные GPIO и т.п. описывать?! не понимаю... ну а ссылки - погляжу, спасибо, может, что прояснится...
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Apr 20 2011, 19:53
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(ARV @ Apr 21 2011, 01:34)  во-первых, в примерах ST нет makefile. а сделать его самостоятельно, не имея прочных понятий в новой архитектуре и не будучи знакомым с новым компилятором, я не смогу. Ну так возьмите готовый  В тех примерах, на которые я сослался, для добавления файла к проекту достаточно расположить его в каталоге src. А вообще - makefile и архитектура - вещи практически ортогональные. Цитата(ARV @ Apr 21 2011, 01:34)  во-вторых, если не ST-шная библиотека - то какая альтернатива? где вся ST-шная периферия описана хорошо? не самому же все эти бесчисленные GPIO и т.п. описывать?! не понимаю... Альтернатива - ручками, через регистры. Доку про них всё равно придётся читать, что с библиотекой, что без. А все регистры описаны в паре специальных файлов - stm32f10x.h и core_cm3.h. Они не являются частью FwLib, а входят в CMSIS.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Apr 22 2011, 03:32
|
Местный
  
Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188

|
Цитата(KARLSON @ Apr 21 2011, 21:40)  Без кода инициализации, что у Вас сейчас, вряд ли поможем. Вот один из вариантов: CODE void ADC1_Init() { ADC1->CR1 = ADC_CR1_DISCEN | ADC_CR1_EOCIE; ADC1->CR2 = ADC_CR2_EXTSEL_0 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTTRIG;
ADC1->SQR1 = 0x00; ADC1->SQR2 = 0x00; ADC1->SQR3 = ADC_SQR3_SQ1_0; ADC1->SMPR2 = ADC_SMPR2_SMP1_2; //0x08;
ADC1->CR2 |= ADC_CR2_ADON; ADC1->CR2 |= ADC_CR2_RSTCAL; while(ADC1->CR2 & ADC_CR2_RSTCAL); ADC1->CR2 |= ADC_CR2_CAL; while(ADC1->CR2 & ADC_CR2_CAL); ADC1->SR = 0; }
void TIM2_Init() { TIM2->CR1 = TIM_CR1_ARPE; TIM2->SMCR = 0; TIM2->ARR = 49; TIM2->PSC = 0x47; // TIM2->CCR2 = 50;
// TIM2->CCMR1 = TIM_CCMR1_OC2PE | TIM_CCMR1_OC2CE; TIM2->CCMR1 = TIM_CCMR1_OC2M_0 | TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2PE; // TIM2->CCMR1 = TIM_CCMR1_OC2CE; TIM2->EGR = TIM_EGR_CC2G; TIM2->DIER = TIM_DIER_CC2IE; TIM2->CCER = TIM_CCER_CC2E; }
Хедер прикрепил.
stm32f10x_map.zip ( 47.77 килобайт )
Кол-во скачиваний: 125
|
|
|
|
|
Apr 23 2011, 15:40
|

Twilight Zone
  
Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990

|
Цитата(Alechin @ Apr 22 2011, 13:27)  Не могу заставить процессор запускаться с программой из флеши. Писал-писал, отлаживался в IARе через ST-Link. А тут решил включить плату отдельно - не хочет запускать программу! ST-Link Utility показывает, что файл прошит. Но стартует программу только если нажать "Core Reset" В чем может быть причина? Проверьте пины BOOT проца.
--------------------
Magic Friend
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|