Перейти к содержанию
    

STM32 – вопросы – проблемы - решения.

Вот только теперь вопрос. Какой максимальный втекающий ток по reset у ULINK?

И еще. Вы с таким уже сталкивались?

Не знаю. Не сталкивался. Предложил, руководствуясь законом Ома. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Потому что симулятор кейла не умеет симулировать 107ой, а 103ий умеет. Для 107го только симулятор ядра.

Можно выбарть 103ий в настройках и симулировать, как 103ий.

keil не умеет для 107 симулировать ВСЮ периферию. а уж uart точно должен уметь, т.к. идентичен 103. проблема как раз не в симуляции периферии, а в симуляции ядра. симулятор запускает с 0 адреса вместо 0х8000000

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А с чего он вдруг должен стартовать с 0х800000? Если он знать не знает, что там еще есть кроме ядра, а флеш частью ядра не является.

Дело в том как устроен симулятор кейла. Не умеет он симулировать по отдельности. Типа вот тут у нас уарты одинаковые - это я могу, а вот тут что-то другое не могу. Просто симулятор не знает

чипа stm32f107 вообще. Потому и ведет себя подобным образом, симулирует только ядро, стартует с 0 и т.д.

Если очень хочется, можно заставить симулятор ядра стартовать с 0х800000, да только какой смысл, если можно запустить симулятор как f103 и получить тоже самое + часть периферии, которая у f107 такая же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А с чего он вдруг должен стартовать с 0х800000? Если он знать не знает, что там еще есть кроме ядра, а флеш частью ядра не является.

Дело в том как устроен симулятор кейла. Не умеет он симулировать по отдельности. Типа вот тут у нас уарты одинаковые - это я могу, а вот тут что-то другое не могу. Просто симулятор не знает

чипа stm32f107 вообще. Потому и ведет себя подобным образом, симулирует только ядро, стартует с 0 и т.д.

Если очень хочется, можно заставить симулятор ядра стартовать с 0х800000, да только какой смысл, если можно запустить симулятор как f103 и получить тоже самое + часть периферии, которая у f107 такая же.

понятно. жаль конечно, всегда в железе отлаживал уже на заключительном этапе, либо придется симулировать для 103, а в железе уже 107 :( и это хваленый кейл :1111493779: интересно когда поддержку 107 в симуляторе планируют?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сомневаюсюь, что вообще планируют. F217 уже вроде как добавили, а он позже появился. Так же как и F100 уже давно могли бы добавить, там же различий почти нет с F101.

Забавно, что кейл почему-то думает, что у них симулятор поддерживает частично F107. На сайте написано и в настройках симулятора именно F107 выставляется, если его выбрать. С F100 честно пишут, что не поддерживается и в настройках симулятора сразу прописывается симулятор ядра.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В дополнение к разговору о битах, выкладываю свои макрофункции конфигурирования портов 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);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у меня вопрос тупой до безобразия... решил пойти в ногу с прогрессом и освоить ARM наконец-таки. для чего приобрел STM32vldiscovery, как наиболее дешевую платку. Скачал и установил Yagarto, плагин для Eclipse и наэтом подзастрял.

во-первых, смотрю в демо-проекты, скачанные с сайта ST, и не могу найти некоторых хидеров. куда они их позасунули? какова вообще структура библиотечных файлов поддержки камней STM32 "от производителя"? может, не стоит ими пользоваться? опыт WinAVR как-то не очень помогает - там все камушки описывались хидерами, лежащими в одной папке, поставляемой с WinAVR, генератор проекта позволял выбрать нужный кристалл - и аллес, на этом подготовка кончалась, оставалось только вспомнить, какая периферия доступна и пользоваться ею. пока что такой аналогии в STM32 не прослеживаю... научите, пожалуйста!

 

во-вторых, если у кого есть опыт работы со всем упомянутым счастьем именно в Eclipse, посоветуйте, что и как там настроить для комфортной работы? Может, есть толковые ссылки по этой теме, плагины какие-то особые? Скачал ARM Eclipse plugin - но, может, это не самое лучшее, что есть?

 

в общем, что-то я в тумане почище ежика... дайте толчок - дальше попробую сам... не смотря на то. что GCC считается кросс-компилятором, для всех таргетов свои фишки, голова пухнет :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в общем, что-то я в тумане почище ежика... дайте толчок - дальше попробую сам... не смотря на то. что GCC считается кросс-компилятором, для всех таргетов свои фишки, голова пухнет :(

А ибо нефиг пользовать специализированные плагины:)

Если взять просто эклипс, и делать makefile-based проекты, то работа со всеми поддерживаемыми GCC таргетами практически идентична.

 

Что касаемо примеров от ST, то обычно там лежит их библиотека, по крайней мере во всех, что я видел - лежала.

Я лично её не использую, не нравится. Могу порекомендовать примеры от scmRTOS, четвёртый там точно под VL.

 

---

ЗЫ. Ещё вот тут постил пример, он вроде на сях и с ст-шной библиотекой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А ибо нефиг пользовать специализированные плагины :)

Если взять просто эклипс, и делать makefile-based проекты, то работа со всеми поддерживаемыми GCC таргетами практически идентична.

 

Что касаемо примеров от ST, то обычно там лежит их библиотека, по крайней мере во всех, что я видел - лежала.

Я лично её не использую, не нравится. Могу порекомендовать примеры от scmRTOS, четвёртый там точно под VL.

 

---

ЗЫ. Ещё вот тут постил пример, он вроде на сях и с ст-шной библиотекой.

 

во-первых, в примерах ST нет makefile. а сделать его самостоятельно, не имея прочных понятий в новой архитектуре и не будучи знакомым с новым компилятором, я не смогу.

 

 

во-вторых, если не ST-шная библиотека - то какая альтернатива? где вся ST-шная периферия описана хорошо? не самому же все эти бесчисленные GPIO и т.п. описывать?! не понимаю...

 

ну а ссылки - погляжу, спасибо, может, что прояснится...

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

во-первых, в примерах ST нет makefile. а сделать его самостоятельно, не имея прочных понятий в новой архитектуре и не будучи знакомым с новым компилятором, я не смогу.

Ну так возьмите готовый:) В тех примерах, на которые я сослался, для добавления файла к проекту достаточно расположить его в каталоге src. А вообще - makefile и архитектура - вещи практически ортогональные.

во-вторых, если не ST-шная библиотека - то какая альтернатива? где вся ST-шная периферия описана хорошо? не самому же все эти бесчисленные GPIO и т.п. описывать?! не понимаю...

Альтернатива - ручками, через регистры. Доку про них всё равно придётся читать, что с библиотекой, что без.

А все регистры описаны в паре специальных файлов - stm32f10x.h и core_cm3.h. Они не являются частью FwLib, а входят в CMSIS.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Контроллер STM32F103RD. Не могу заставить ADC1 тактироваться от Timer2. Вариантов перепробовал ...очень много. В чем может быть фишка?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Без кода инициализации, что у Вас сейчас, вряд ли поможем.

 

Вот один из вариантов:

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не могу заставить процессор запускаться с программой из флеши. Писал-писал, отлаживался в IARе через ST-Link. А тут решил включить плату отдельно - не хочет запускать программу! ST-Link Utility показывает, что файл прошит. Но стартует программу только если нажать "Core Reset" В чем может быть причина?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не могу заставить процессор запускаться с программой из флеши. Писал-писал, отлаживался в IARе через ST-Link. А тут решил включить плату отдельно - не хочет запускать программу! ST-Link Utility показывает, что файл прошит. Но стартует программу только если нажать "Core Reset" В чем может быть причина?

 

Проверьте пины BOOT проца.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...