STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

Re: STM32 новичку в ARM что к чему

Сообщение amv2000 »

es131245 писал(а):Может ли таймер быть и master И slavом?

Вы наверное хотели сказать I2C.
Аватара пользователя
es131245
Потрогал лапой паяльник
Сообщения: 369
Зарегистрирован: Пт фев 01, 2013 21:05:30

Re: STM32 новичку в ARM что к чему

Сообщение es131245 »

Код: Выделить всё

TIM_HandleTypeDef initTimM;
TIM_HandleTypeDef initTimS;
TIM_MasterConfigTypeDef mTim;
TIM_SlaveConfigTypeDef sTim;
TIM_SlaveConfigTypeDef slConf;
TIM_IC_InitTypeDef icConf;

void Error_Handler(void)
{HAL_GPIO_WritePin(GPIOG,GPIO_PIN_14,GPIO_PIN_SET);
 while(1){}}

void EXTI0_IRQHandler(void)
{if(HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_14)==GPIO_PIN_RESET)
 {if(HAL_TIM_IC_Stop_IT(&initTimM,TIM_CHANNEL_1)!=HAL_OK)Error_Handler();
  if(HAL_TIM_IC_Start_IT(&initTimM,TIM_CHANNEL_2)!=HAL_OK)Error_Handler();}
 else
 {if(HAL_TIM_IC_Stop_IT(&initTimM,TIM_CHANNEL_2)!=HAL_OK)Error_Handler();
  if(HAL_TIM_IC_Start_IT(&initTimM,TIM_CHANNEL_1)!=HAL_OK)Error_Handler();}
 HAL_GPIO_TogglePin(GPIOG,GPIO_PIN_14);
 HAL_NVIC_ClearPendingIRQ(EXTI0_IRQn);
 HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);}

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{extern USBD_HandleTypeDef hUsbDeviceHS;
 extern TIM_HandleTypeDef initTimS;
 uint8_t buff_TX[128];
 buff_TX[0]='0';
 if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_1)
 {buff_TX[1]=1;
  buff_TX[2]=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1)>>8;
  buff_TX[3]=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);}
 else
 {buff_TX[1]=2;
  buff_TX[2]=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2)>>8;
  buff_TX[3]=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2);}
  buff_TX[4]=TIM3->CNT>>8;
  buff_TX[5]=TIM3->CNT;
 USBD_CDC_SetTxBuffer(&hUsbDeviceHS,&buff_TX[0],16);
 USBD_CDC_TransmitPacket(&hUsbDeviceHS);
 HAL_GPIO_TogglePin(GPIOG,GPIO_PIN_13);}

int main(void)
{HAL_Init();
 Systick();
 __GPIOH_CLK_ENABLE();

 __GPIOG_CLK_ENABLE();
 ButtonInit();
 ButtonCaptureInit();

 __GPIOB_CLK_ENABLE();
 MX_USB_DEVICE_Init();
 HAL_GPIO_WritePin(GPIOG,GPIO_PIN_13|GPIO_PIN_14,GPIO_PIN_RESET);

 __GPIOE_CLK_ENABLE();
 GPIO_InitTypeDef GPIO_InitStruct;
 GPIO_InitStruct.Pin=GPIO_PIN_5|GPIO_PIN_6;
 GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;
 GPIO_InitStruct.Pull=GPIO_PULLUP;
 GPIO_InitStruct.Speed=GPIO_SPEED_HIGH;
 GPIO_InitStruct.Alternate=GPIO_AF3_TIM9;
 HAL_GPIO_Init(GPIOE,&GPIO_InitStruct);
 HAL_NVIC_SetPriority(TIM1_BRK_TIM9_IRQn,5,5);
 HAL_NVIC_EnableIRQ(TIM1_BRK_TIM9_IRQn);

 __TIM9_CLK_ENABLE();
 initTimM.Instance=TIM9;
 initTimM.Init.Period=0xffff;
 initTimM.Init.Prescaler=0;
 initTimM.Init.ClockDivision=0;
 initTimM.Init.CounterMode=TIM_COUNTERMODE_UP;
 if(HAL_TIM_IC_Init(&initTimM)!=HAL_OK)Error_Handler();

 __TIM3_CLK_ENABLE();
 initTimS.Instance=TIM3;
 initTimS.Init.Period=0xffff;
 initTimS.Init.Prescaler=0;
 initTimS.Init.ClockDivision=0;
 initTimS.Init.CounterMode=TIM_COUNTERMODE_UP;
 if(HAL_TIM_IC_Init(&initTimS)!=HAL_OK)Error_Handler();

 sTim.SlaveMode=TIM_SLAVEMODE_GATED; //GATED
 sTim.InputTrigger=TIM_TS_ITR0;
 if(HAL_TIM_SlaveConfigSynchronization(&initTimM,&sTim)!=HAL_OK)Error_Handler();


 icConf.ICPrescaler=TIM_ICPSC_DIV1;
 icConf.ICFilter=0;
 icConf.ICPolarity=TIM_ICPOLARITY_RISING;
 icConf.ICSelection=TIM_ICSELECTION_INDIRECTTI;
 if(HAL_TIM_IC_ConfigChannel(&initTimM,&icConf,TIM_CHANNEL_1)!=HAL_OK)Error_Handler();
 icConf.ICPolarity=TIM_ICPOLARITY_FALLING;
 icConf.ICSelection=TIM_ICSELECTION_DIRECTTI;
 if(HAL_TIM_IC_ConfigChannel(&initTimM,&icConf,TIM_CHANNEL_2)!=HAL_OK)Error_Handler();
 slConf.InputTrigger=TIM_TS_TI2FP2;
 slConf.SlaveMode=TIM_SLAVEMODE_RESET;
 if(HAL_TIM_SlaveConfigSynchronization(&initTimM,&slConf)!=HAL_OK)
 if(HAL_TIM_IC_Start_IT(&initTimM,TIM_CHANNEL_2)!=HAL_OK)Error_Handler();
 if(HAL_TIM_IC_Start_IT(&initTimM,TIM_CHANNEL_1)!=HAL_OK)Error_Handler();
    mTim.MasterOutputTrigger=TIM_TRGO_UPDATE; mTim.MasterSlaveMode=TIM_MASTERSLAVEMODE_ENABLE; if(HAL_TIMEx_MasterConfigSynchronization(&initTimS,&mTim)!=HAL_OK)Error_Handler();

 while(1){}}

uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: STM32 новичку в ARM что к чему

Сообщение uk8amk »

Один таймер главный, другой подчинённый. Примерно так:
AN2592
Application note
How to achieve 32-bit timer resolution using the link system
in STM32F10x microcontrollers

Но для IC в этом случае могут быть сюрпризы вроде задержки N тактов на синхронизацию подчинённых таймеров.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

Есть необходимость по выводу фрейма через SPI запускать таймер. Как это сделать руками в обработчике прерывания SPI, вопросов не вызывает. Однако, это как-то совсем не изящно. По идее, можно попробовать завести ногу NSS на вход ETR таймера и это вроде бы будет полностью аппаратным решением, но тоже как-то выглядит не очень. Может быть есть какое-то решение, чтобы окончание передачи по SPI аппаратно запускало таймер ?
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: STM32 новичку в ARM что к чему

Сообщение uk8amk »

a5021 писал(а):чтобы окончание передачи по SPI аппаратно запускало таймер ?

21.3.9 SPI communication using DMA (direct memory addressing)
Figure 232. Reception using DMA

По окончанию приёма кадра пусть DMA установит CEN в регистре CR1 таймера.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

Мне ничего не известно о том, что DMA умеет устанавливать биты где-либо, кроме своих собственных регистров. Если речь идет об установлении бита программно из обработчика прерывания DMA, то такая возможность известна, но интересует, нет ли чисто аппаратного решения, чтобы получалась более жесткая синхронизация между окончанием передачи и запуском таймера.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: STM32 новичку в ARM что к чему

Сообщение uk8amk »

Установка бита CEN по факту есть копирование числа из одной ячейки памяти(DMA_CMAR) в другую ячейку(DMA_CPAR). Запуском DMA является событие окончания приёма(или передачи). Длина пересылки = 1 слово(регистр CR1 таймера). Получается всё аппаратно без каких-либо прерываний.
Аватара пользователя
Aid1992
Встал на лапы
Сообщения: 140
Зарегистрирован: Вс ноя 11, 2012 14:13:02

Re: STM32 новичку в ARM что к чему

Сообщение Aid1992 »

Устанавливаю GNU для CooCox v.2 beta (система Windows XP Professional SP3), выскакивает вот такая ошибка, и установка не может завершится. У кого какие предположения есть по этому поводу?

2015-05-09_085906.jpg
(83.07 КБ) 633 скачивания
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: STM32 новичку в ARM что к чему

Сообщение oleg110592 »

в архиве скачать и распаковать куда ни будь - например у меня D:\GCCARM (имхо лучше в корне папка).
Качал архив тут: https://launchpad.net/gcc-arm-embedded файл gcc-arm-none-eabi-4_9-2015q1-20150306-win32.zip
Кокос работает, вин 8.1. В переменные среды, на всякий, прописал путь D:\GCCARM\bin
Аватара пользователя
Aid1992
Встал на лапы
Сообщения: 140
Зарегистрирован: Вс ноя 11, 2012 14:13:02

Re: STM32 новичку в ARM что к чему

Сообщение Aid1992 »

Спасибо! Помогло.
kapitan0v
Открыл глаза
Сообщения: 56
Зарегистрирован: Сб июн 14, 2014 09:05:06

Re: STM32 новичку в ARM что к чему

Сообщение kapitan0v »

Попробовал подключить батарейку к STM32F0Disco. Убрал SB1 и установил C17. Все работает, часы идут при отключении питания. Решил измерить ток - при работающем от источника питания потребление с батарейки - 33 мкА :shock:, если отключить питание - 1 мкА. Это нормально? Мне кажется при наличии питания не должно брать от батареи.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: STM32 новичку в ARM что к чему

Сообщение oleg110592 »

kapitan0v писал(а):Попробовал подключить батарейку к STM32F0Disco...

в документации есть такое:
Battery backup domain
To retain the content of the Backup registers and supply the whole RTC domain when VDD is
turned off, VBAT pin can be connected to an optional standby voltage supplied by a battery
or by another source.
The VBAT pin powers the RTC unit, the LSE oscillator and the PC13 to PC15 IOs, allowing
the RTC to operate even when the main power supply is turned off. The switch to the VBAT
supply is controlled by the Power Down Reset embedded in the Reset block or (on
STM32F0x8 devices) by the external NPOR signal.
Warning: During tRSTTEMPO (temporization at VDD startup) or after a PDR is
detected, the power switch between VBAT and VDD remains connected
to VBAT.
During the startup phase, if VDD is established in less than tRSTTEMPO
(Refer to the datasheet for the value of tRSTTEMPO) and VDD > VBAT +
0.6 V, a current may be injected into VBAT through an internal diode
connected between VDD and the power switch (VBAT).
If the power supply/battery connected to the VBAT pin cannot support
this current injection, it is strongly recommended to connect an
external low-drop diode between this power supply and the VBAT pin.


попробуйте батарейку подключить через диод шотки
kapitan0v
Открыл глаза
Сообщения: 56
Зарегистрирован: Сб июн 14, 2014 09:05:06

Re: STM32 новичку в ARM что к чему

Сообщение kapitan0v »

oleg110592 писал(а):попробуйте батарейку подключить через диод шотки


Я так понял это решение что бы то не шел В БАТАРЕЙКУ. У меня же проблема в том что идет ИЗ нее при включенном устройстве.
alexf58
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Сб фев 09, 2013 23:00:23

Re: STM32 новичку в ARM что к чему

Сообщение alexf58 »

kapitan0v писал(а):
oleg110592 писал(а):попробуйте батарейку подключить через диод шотки


Я так понял это решение что бы то не шел В БАТАРЕЙКУ. У меня же проблема в том что идет ИЗ нее при включенном устройстве.


Понял правильно, но попробовать все равно можно: диод чуть уменшит напряжение с батарейки до уровня меньше VDD.
Аватара пользователя
vanika
Родился
Сообщения: 10
Зарегистрирован: Ср май 06, 2015 14:25:29

Re: STM32 новичку в ARM что к чему

Сообщение vanika »

Подскажите про АЦП.

Читаю даташит, а именно:
Снимок.JPG
(26.72 КБ) 597 скачиваний


Из прочтенного делаю вывод что для кристалла STM32F407 максимальное время дискретизации равно 3+12=15 и делим на частоту PCLK2 (42 MHZ) и получаем в итоге 0,357 мкс. Таким образом умножив 0.357 на 12 бит получим время одного сканирования 5 мкс?Верно?

Где то читал что максимальная частота PCLK2 = 32 MHZ- но в datasheet-е про это ничего не нашел.

Вроде еще есть дуальный режим - объединение АЦП кристала, которое якобы позволяет уменьшить это время...
STM32F407 Discovery + KEIL 5
Smen
Грызет канифоль
Сообщения: 256
Зарегистрирован: Вт окт 08, 2013 07:38:59
Откуда: СПб

Re: STM32 новичку в ARM что к чему

Сообщение Smen »

Распиновка такая
Изображение
Правильно ли я понимаю, что с контактов 1 и 2 (Target Vcc) напряжение должно подаваться с программатора на чип (режим SWD)?
Имею ST-Link V1, и, при попытке обращения к чипу (утилитой STM32 ST-Link), на в/у контактах ничего не появляется.
Если подать питание напрямую с 19 пина, то и чтение и программирование проходит без проблем.
Это так и должно быть, или где-то косяк (программатор достался б/у)?
Аватара пользователя
Pavel_1978
Опытный кот
Сообщения: 830
Зарегистрирован: Пт ноя 16, 2007 11:21:37

Re: STM32 новичку в ARM что к чему

Сообщение Pavel_1978 »

эти контакты подключаются к шине питания программируемого МК.
и программирование происходит при поданном на таргет (плату) напряжении питания.
По ним програматор определяет величину напряжения питания, и от него же работает транслятор уровней (если ст-линк честный и он там есть :dont_know: ) так как камень может работать и на 2V.
Smen
Грызет канифоль
Сообщения: 256
Зарегистрирован: Вт окт 08, 2013 07:38:59
Откуда: СПб

Re: STM32 новичку в ARM что к чему

Сообщение Smen »

Pavel_1978 писал(а):если ст-линк честный и он там есть
Да вроде "честный", но работал без подачи этого напряжения.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение DX168B »

Собственно, у меня вопрос на миллион.
Известно, что с помощью отладчика, в МК STM32 можно править регистры, переменные в ОЗУ и вообще все,
что имеет атрибуты rw. Соответственно, есть возможность порулить периферией прямо из отладчика.
Меня интересует вопрос: А есть ли готовые утилиты, позволяющие шить отладчиком (ST-LINK или аналогичный)
внешние FLASH и EEPROM, подключенные к SPI или I2C камня, прямо через отладочные интерфейсы?
Ну, приблуда к OpenOCD или что-нибудь в таком роде?
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
Pavel_1978
Опытный кот
Сообщения: 830
Зарегистрирован: Пт ноя 16, 2007 11:21:37

Re: STM32 новичку в ARM что к чему

Сообщение Pavel_1978 »

Smen писал(а):Да вроде "честный", но работал без подачи этого напряжения.

С ст-линком особо не разбирался - работает и работает, а вот J-Link при таких извратствах ( нет напряжения тагерта, или оно не в диапазоне для прошивки) посылает далеко и сразу.
Ну и главное - делай как написал производитель и будет щастье)))
Ответить

Вернуться в «ARM»