|
попогите разобраться с тактированием портов в stm32f105/107, ищу примеры |
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 36)
|
Feb 13 2013, 05:17
|
Частый гость
 
Группа: Свой
Сообщений: 112
Регистрация: 1-05-09
Из: Ростов-на-Дону
Пользователь №: 48 518

|
STM32 самые популярные микроконтроллеры на ядре Cortex-M3 и вы не можете найти под них примеры?  Существует куча различных блогов посвященных данным контроллерам. Ну или самое простое зайти на сайт STM в раздел Firmware для F1хх-го семейства и посмотреть какие там есть примеры. Там можно обнаружить stm32f10x stdperiph library и в ней куча примеров по всей переферии F1xx-го семейства.
--------------------
«У современных мобильных телефонов такая же вычислительная мощь, что и у компьютеров NASA в 60-е годы. И в то время этого хватало, чтобы запустить человека в космос, а сегодня — только чтобы запускать птиц в свиней.»
|
|
|
|
|
Feb 13 2013, 08:14
|
Частый гость
 
Группа: Свой
Сообщений: 112
Регистрация: 1-05-09
Из: Ростов-на-Дону
Пользователь №: 48 518

|
Код GPIO_InitTypeDef GPIO_InitStructure; /* GPIOD Periph clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
/* Configure PD0 and PD2 in output pushpull mode */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOD, &GPIO_InitStructure);
--------------------
«У современных мобильных телефонов такая же вычислительная мощь, что и у компьютеров NASA в 60-е годы. И в то время этого хватало, чтобы запустить человека в космос, а сегодня — только чтобы запускать птиц в свиней.»
|
|
|
|
|
Feb 13 2013, 09:11
|
Местный
  
Группа: Участник
Сообщений: 222
Регистрация: 14-12-12
Из: новосибирск
Пользователь №: 74 845

|
спасибо за пример на частоте 2мгц пин у меня тоже работает(несмотря на то что я на 50 разрешил) а вот выше не получается, наверное я клоки не так настраиваю дайте плиз пример настройки частоты тактирования от внешнего кварца 25мгц и чтоб на порт максимальную частоту возможную я мог подать, я совсем начинающий в кортексах, раньше на амеге писал и структурами не пользовался CODE #include "stm32f10x.h" #include "bits.h" #include "stm32f10x_pet.h"
unsigned long d, e; #define HSE_on RCC -> CR |= (RCC_CR_HSEON)// Включает внешний высокоскочастотный кварц(HSE) #define HSE_sel RCC -> CFGR &= ~(RCC_CFGR_SW_1); RCC -> CFGR |= (RCC_CFGR_SW_0)// выбираем HSE в качастве // источника системного клока sysclk #define enable_clock(port) RCC->APB2ENR|=RCC_APB2ENR_IOP##port##EN // включение тактирования порта
//VVVVVVVVVVVVVVVVVVVVV main() VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV void main() {
//FLASH->ACR |= FLASH_ACR_PRFTBE; // Enable Prefetch Buffer. //FLASH->ACR |= FLASH_ACR_LATENCY_1; // HSE_on; //for (d=0; d<1000000; ++d){e ++;}; //HSE_sel; //enable_clock(D);//включение тактирования порта //GPIOD->CRL&=~(GPIO_CRL_MODE7_1); GPIOD->CRL|=(GPIO_CRL_MODE7_0); //11: Output mode, max speed 50 MHz //GPIOD->CRL&=~(GPIO_CRL_CNF7_0);GPIOD->CRL&=~(GPIO_CRL_CNF7_1); // set port as General purpose output push-pull GPIO_InitTypeDef GPIO_InitStructure; /* GPIOD Periph clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
/* Configure PD0 and PD2 in output pushpull mode */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOD, &GPIO_InitStructure); //VVVVVVVVVVVVVVVVVVVVV Основной цикл VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV while (1) { pin_off(D,7); //for (d=0; d<1000000; ++d){e ++;}; pin_on(D,7); //for (d=0; d<1000000; ++d){e ++;}; }//^^^^^^^^^^^^^^^^^^^^^^^ Основной цикл ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ }//^^^^^^^^^^^^^^^^^^^^^^^^ main() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^
Сообщение отредактировал super_puper - Feb 13 2013, 09:16
|
|
|
|
|
Feb 13 2013, 11:56
|
Частый гость
 
Группа: Свой
Сообщений: 112
Регистрация: 1-05-09
Из: Ростов-на-Дону
Пользователь №: 48 518

|
Цитата(super_puper @ Feb 13 2013, 13:11)  дайте плиз пример настройки частоты тактирования от внешнего кварца 25мгц и чтоб на порт максимальную частоту возможную я мог подать, я совсем начинающий в кортексах, раньше на амеге писал и структурами не пользовался Опять же все есть в stm32f10x stdperiph library, файл system_stm32f10x.c.
--------------------
«У современных мобильных телефонов такая же вычислительная мощь, что и у компьютеров NASA в 60-е годы. И в то время этого хватало, чтобы запустить человека в космос, а сегодня — только чтобы запускать птиц в свиней.»
|
|
|
|
|
Feb 14 2013, 11:42
|
Знающий
   
Группа: Свой
Сообщений: 693
Регистрация: 21-06-05
Из: Санкт-Петербург
Пользователь №: 6 184

|
Цитата за ссылки спасибо! но все равно кому не жалко кидайте примеры или целиком проекты, интересно посмотреть кто как реализует, все по разному.. я понимаю, что поиском по форму тоже тяжко пользоваться: http://electronix.ru/forum/index.php?showtopic=110141Цитата подскажите ещё такой момент, в ИАРе проект компилится нормально но попытка переместиться к телу функции например правая кнопка на SystemInit() - go to definition; выдает ошибку неправильный путь.. посмотрите в настройках проекта. возможно, указано несколько путей.
|
|
|
|
|
Feb 14 2013, 17:38
|
Местный
  
Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797

|
Цитата(MALLOY2 @ Feb 14 2013, 16:14)  P.S. Не умеет STM32 махать ногами с большой скоростью. Неправда ваша. Замечательно махает на частоте 1/2 системной, без использования таймера. Правда на младших моделях (без акселератора и кеша, stm32f1 и ниже) я не замерял, но думаю если разместить код в озу - замахает. А настройки порта определяют крутизну фронтов.
|
|
|
|
|
Feb 19 2013, 04:12
|
Местный
  
Группа: Участник
Сообщений: 222
Регистрация: 14-12-12
Из: новосибирск
Пользователь №: 74 845

|
мне немного не понятна связь между системной частотой(вывел на мсо) и частотой дрыганья ноги.. (так много 20?? тактов требуется на то чтоб порт пееключить?) и почему stm32f107(макс f=72) работает на 142 мгц???) системная мгц: 40 72 142 нога мгц: 1 2 3.4 CODE #include "stm32f10x.h" #include "bits.h" #include "pet.h" #include "stm32f10x.h" #include "stm32f10x_conf.h" #include "stdlib.h"
unsigned long d, e; GPIO_InitTypeDef GPIO_InitStructure;// позволяет в дальнейшем в программе пользоваться настройкой портов через структуры //uchar HSEStartUpStatus;
//VVVVVVVVVVVVVVVVVVVVV main() VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV void main() { //SystemInit();//библиотечная функция sys_clock(); portA8_as_MCO;// установим порт А8 как МСО=sysclock port_init(D,7,50,Out,PP); // настроить порт D.7 на выход 50 мегагерц, PushPull //VVVVVVVVVVVVVVVVVVVVV Основной цикл VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV while (1) { pin_off(D,7); //for (d=0; d<10; ++d){e ++;}; pin_on(D,7); //for (d=0; d<10; ++d){e ++;}; }//^^^^^^^^^^^^^^^^^^^^^^^ Основной цикл ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ }//^^^^^^^^^^^^^^^^^^^^^^^^ main() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ CODE //defines for STM32F10x
#define test_bit(domain,reg,bit) domain## -> ##reg## &= ##bit
// функции для работы с железом stm32f10x // Разработал Свистунов Петр #define uchar unsigned char
// VVVVVVVVVVVVVVVVVVVVVV пин on/off VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV #define pin_on(port,bit) GPIO##port## -> ODR |= GPIO_ODR_ODR##bit // установить на порте 1 #define pin_off(port,bit) GPIO##port## -> ODR &= ~ GPIO_ODR_ODR##bit // установить на порте 0 #define pin_test(port,bit) GPIO##port## -> ODR &= GPIO_ODR_ODR##bit // возвращает истинное состояние на выводе ножки порта //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
//vvvvvvvvvvv Конфигурируем порты: направление и максимальная частота работы портов vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv #define port_init(port,pin,speed,AForOUT,pp) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO##port##, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_##pin##;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_##speed##MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_##AForOUT##_##pp##; GPIO_Init(GPIO##port##, &GPIO_InitStructure) // пример использования // один раз перед майном пишем: InitTypeDef GPIO_InitStructure;// позволяет в дальнейшем в программе пользоваться настройкой портов через структуры // далее в программе // port_init(D,7,50,Out,PP); // настроить порт D.7 на выход 50 мегагерц PushPull // port_init(A,8,50,AF,PP); // настроить порт D.7 как AlternFunction 50 мегагерц PushPull
#define portA8_as_MCO RCC ->CFGR |= (RCC_CFGR_MCO_2); port_init(A,8,50,AF,PP)
//vvvvvvvvvvvvvvv Частоты тактирования vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv #define HSE_on RCC -> CR |= (RCC_CR_HSEON)// Включает внешний высокоскочастотный кварц(HSE) #define HSE_sel RCC -> CFGR &= ~(RCC_CFGR_SW_1); RCC -> CFGR |= (RCC_CFGR_SW_0)// выбираем HSE в качастве источника системного клока sysclk CODE #include "stm32f10x.h" #include "bits.h" //#include "system_stm32f10x.c" uchar HSEStartUpStatus;
// vvvvvvvvvvvv Конфигурация портов vvvvvvvvvvvvvvvvvvvvv void sys_clock() { //RCC_ClocksTypeDef RCC_ClockFreq;
/* RCC system reset(for debug purpose) */ RCC_DeInit();
/* Enable HSE */ RCC_HSEConfig(RCC_HSE_ON);
/* Wait till HSE is ready */ HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus != ERROR) { /* Enable Prefetch Buffer */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/****************************************************************/ /* HSE=25MHz, HCLK=72MHz, PCLK2=72MHz, PCLK1=36MHz */ /****************************************************************/ /* Flash 2 wait state */ FLASH_SetLatency(FLASH_Latency_2); /* HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK2 = HCLK */ RCC_PCLK2Config(RCC_HCLK_Div1); /* PCLK1 = HCLK/2 */ RCC_PCLK1Config(RCC_HCLK_Div2); /* ADCCLK = PCLK2/4 */ RCC_ADCCLKConfig(RCC_PCLK2_Div6);
/* Configure PLLs *********************************************************/ /* PPL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ RCC_PREDIV2Config(RCC_PREDIV2_Div5); RCC_PLL2Config(RCC_PLL2Mul_8);
/* Enable PLL2 */ RCC_PLL2Cmd(ENABLE);
/* Wait till PLL2 is ready */ while (RCC_GetFlagStatus(RCC_FLAG_PLL2RDY) == RESET) {}
/* PPL1 configuration: PLLCLK = (PLL2 / 5) * 9 = 72 MHz */ RCC_PREDIV1Config(RCC_PREDIV1_Source_PLL2, RCC_PREDIV1_Div1); RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_4);
/* Enable PLL */ RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready */ while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {}
/* Select PLL as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/* Wait till PLL is used as system clock source */ while (RCC_GetSYSCLKSource() != 0x08) {} } }// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Сообщение отредактировал super_puper - Feb 19 2013, 05:12
|
|
|
|
|
Feb 19 2013, 06:06
|

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

|
Цитата(super_puper @ Feb 19 2013, 07:12)  мне немного не понятна связь между системной частотой(вывел на мсо) и частотой дрыганья ноги.. (так много 20?? тактов требуется на то чтоб порт пееключить?) и почему stm32f107(макс f=72) работает на 142 мгц???) А вы посмотрите по ассемблерным командам, что делаете. Например, в отладчике Keil. Или по листингу. 142 MHz - повезло.  Вопрос, сколько проживет такой микроконтроллер. Наверное, много меньше нормально работающего. Я вот работу с внешней памятью ОЗУ (время доступа 55 ns), с которой работал при частоте микроконтроллера 72 MHz, оставил без изменений при частоте микроконтроллера 120 MHz. Забыл исправить. И - не заработала.
|
|
|
|
|
Feb 19 2013, 08:31
|
Местный
  
Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797

|
Большую часть времени съедает вычитывание команд: Код FLASH_SetLatency(FLASH_Latency_2); На каждое обращение к флешу тратится два лишних такта. Или разместите код в озу или снизте частоту процессора так что бы работать без дополнительных циклов ожидания.
|
|
|
|
|
Feb 19 2013, 08:54
|

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

|
Цитата(Flexz @ Feb 19 2013, 11:31)  Большую часть времени съедает вычитывание команд: Код FLASH_SetLatency(FLASH_Latency_2); На каждое обращение к флешу тратится два лишних такта. Или разместите код в озу или снизте частоту процессора так что бы работать без дополнительных циклов ожидания. Из ОЗУ будет работать медленнее.  Не каждая команда потребует обращения к Flash. Есть буфер. P.S. и конвейер.
|
|
|
|
|
Feb 19 2013, 09:27
|
Частый гость
 
Группа: Свой
Сообщений: 112
Регистрация: 1-05-09
Из: Ростов-на-Дону
Пользователь №: 48 518

|
Цитата(ViKo @ Feb 19 2013, 12:54)  Из ОЗУ будет работать медленнее.  Это еще почему? Вы проверяли?
--------------------
«У современных мобильных телефонов такая же вычислительная мощь, что и у компьютеров NASA в 60-е годы. И в то время этого хватало, чтобы запустить человека в космос, а сегодня — только чтобы запускать птиц в свиней.»
|
|
|
|
|
Feb 19 2013, 09:42
|
Частый гость
 
Группа: Свой
Сообщений: 112
Регистрация: 1-05-09
Из: Ростов-на-Дону
Пользователь №: 48 518

|
Цитата(ViKo @ Feb 19 2013, 13:36)  Наверное, проверял. Если же все нужно читать из ОЗУ, сами понимаете... Так у ОЗУ частота в несколько раз выше.
--------------------
«У современных мобильных телефонов такая же вычислительная мощь, что и у компьютеров NASA в 60-е годы. И в то время этого хватало, чтобы запустить человека в космос, а сегодня — только чтобы запускать птиц в свиней.»
|
|
|
|
|
Feb 19 2013, 09:47
|
Частый гость
 
Группа: Свой
Сообщений: 112
Регистрация: 1-05-09
Из: Ростов-на-Дону
Пользователь №: 48 518

|
Цитата(ViKo @ Feb 19 2013, 13:44)  Сколько?  Такая же как и у ядра.
--------------------
«У современных мобильных телефонов такая же вычислительная мощь, что и у компьютеров NASA в 60-е годы. И в то время этого хватало, чтобы запустить человека в космос, а сегодня — только чтобы запускать птиц в свиней.»
|
|
|
|
|
Feb 19 2013, 10:35
|
Частый гость
 
Группа: Свой
Сообщений: 112
Регистрация: 1-05-09
Из: Ростов-на-Дону
Пользователь №: 48 518

|
Цитата(ViKo @ Feb 19 2013, 14:00)  Правильно. А за сколько тактов ядро выбирает команды из буфера команд, в который они попадают из flash? За один. Лучше скажите за сколько тактов команда попадает в буфер? Возьмем STM32F4 с частотой ядра 168МГц и такой же частотой SRAM, так вот чтобы прочитать команду из flash ему нужо ждать 5 тактов, т.е. работа с flash в 5 раз медленнее, чем с SRAM. Или я не прав?
--------------------
«У современных мобильных телефонов такая же вычислительная мощь, что и у компьютеров NASA в 60-е годы. И в то время этого хватало, чтобы запустить человека в космос, а сегодня — только чтобы запускать птиц в свиней.»
|
|
|
|
|
Feb 19 2013, 11:41
|
Частый гость
 
Группа: Свой
Сообщений: 112
Регистрация: 1-05-09
Из: Ростов-на-Дону
Пользователь №: 48 518

|
Цитата(ViKo @ Feb 19 2013, 15:14)  Не правы. У этого микроконтроллера 128-битовая шина доступа к Flash. А команды могут быть 16-битовые или 32-битовые. Итого, в лучшем случае, читается сразу 8 команд. В худшем 4. 128-битовая шина - это хорошо, но только для кода без ветвлений. Может есть какие-нибудь статьи с тестами выполнения кода из flash и SRAM?
--------------------
«У современных мобильных телефонов такая же вычислительная мощь, что и у компьютеров NASA в 60-е годы. И в то время этого хватало, чтобы запустить человека в космос, а сегодня — только чтобы запускать птиц в свиней.»
|
|
|
|
|
Feb 20 2013, 06:22
|
Знающий
   
Группа: Свой
Сообщений: 693
Регистрация: 21-06-05
Из: Санкт-Петербург
Пользователь №: 6 184

|
Цитата в установках компилятора поставил оптимизацию по скорости, ногодрыганье увеличелось в разы на частоте системной 72 нога дрыгается 3.3мгц Вы еще DMA задействуйте...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|