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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Мудрый кот
Аватара пользователя
Сообщения: 1795
Зарегистрирован: Ср апр 04, 2012 09:55:53
Откуда: Северодонецк

Сообщение RoboC »

Держите.
У гугла надо спросить "stm32f103c8t6" , перейти на картинки и там все ясно будет.
Вложения
arduino-stm32f103c8t6-schematics.png
(214.08 КБ) 431 скачивание
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 725
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

Сообщение amv2000 »

[uquote="WatchCat",url="/forum/viewtopic.php?p=3309920#p3309920"]может кто-то видел уже срисованную схему этих плат?[/uquote]ИзображениеИскать отладочная плата на STM32F103C8T6
Реклама
Встал на лапы
Сообщения: 125
Зарегистрирован: Вс мар 01, 2009 20:41:19

Сообщение xVekx »

Myp3ik. достаточно чтобы проработать 1-5 мин, да и выделяется от силы 5 байт.А может быть что, в основном цикле тоже есть выделение дин памяти, при прерывании просто адреса выделяемой памяти друг на друга накладываются?
Грызет канифоль
Аватара пользователя
Сообщения: 250
Зарегистрирован: Ср янв 17, 2018 13:09:14

Сообщение AndyBig »

А что говорит стек вызовов?
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Аватара пользователя
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Сообщение Myp3ik »

xVekx, можно попробовать вызовы выделения памяти обернуть как критическую секцию

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

__disable_irq();
uint8_t *txbuf = (uint8_t*)malloc(sizeof(uint8_t) * (2 + count));
__enable_irq();
А еще лучше, как Вы и поступили, просто выделить массив. Где это возможно, от динамического выделения памяти лучше отказаться, особенно там, где оно не нужно в принципе.
Иван Сусанин - первый полупроводник :solder:
Реклама
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

Добрый день, подскажите, для какой цели здесь стоит пред делитель "RTC_DIV", вроде как для более точного измерения, но каким образом это происходит не понятно. Так же в даташите
http://www.st.com/content/ccc/resource/ ... to,-13,759
написано что он перезагружается из RTC_PRL, но я смотрю в отладки IAR, значение RTC_DIV скачет как хочешь и не капельки не совпадает с PRL.
Ну и ещё один вопрос, его можно считывать, но зачем?
Изображение
Вложения
RTC.png
(65.9 КБ) 266 скачиваний
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2198
Зарегистрирован: Ср мар 14, 2007 01:50:10

Сообщение Adusik »

STM32F105RBT6 LQFP64 port РA9 pin 42 - подскажите кто в теме, для чего на эту ногу подаётся постоянно 5В?
Мучитель микросхем
Аватара пользователя
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Сообщение Myp3ik »

USB OTG_FS_VBUS
Иван Сусанин - первый полупроводник :solder:
Открыл глаза
Сообщения: 74
Зарегистрирован: Вс янв 24, 2010 21:29:07

Сообщение Gin87 »

Ребята, помогите. Написал код мигания диода по кнопке, не работает. Использую CMSIS. Компилится без ошибок.

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

#include "stm32f10x.h"                  // Device header

int main(void)
{
	RCC->APB2ENR|=RCC_APB2ENR_IOPCEN; //включаем тактирование
	RCC->APB2ENR|=RCC_APB2ENR_IOPAEN; //включаем тактирование
	
	GPIOC->CRH 	|=  (GPIO_CRH_MODE13_1);	// Выставляем бит MODE0. Режим MODE10 = Max Speed 2MHz
	GPIOC->CRH	&= ~(GPIO_CRH_CNF13);	// Сбрасываем биты CNF для бита 13. Режим 00 - Push-Pull 
	
	GPIOA->CRL |=  GPIO_CRL_CNF0_1;
	GPIOA->CRL &= ~(GPIO_CRL_MODE0);
	
	
	GPIOA->ODR  &= ~GPIO_ODR_ODR0; //подтяжка к земле
	
	
	
	
	
	while(1)
	{
		
		
		if ((GPIOA->IDR & 0x01)==0x01) //Кнопка нажата? Соединение на плюс.
		{ 
			
			GPIOC->BSRR=GPIO_BSRR_BR13; //сбросили бит	
		} 
		 else 
		{
			GPIOC->BSRR=GPIO_BSRR_BS13; //установили бит	
		}
		
	}
	



}

Опытный кот
Аватара пользователя
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Сообщение baghear »

Добрый день, подскажите пожалуйста как настроить porch для данного контроллера.
http://prntscr.com/iqv0td
Получается жестко задается только задний porch, а как выбрать длину синхроимпульса и передний?
DOTCLK 60MHz.
Родился
Сообщения: 17
Зарегистрирован: Пт авг 19, 2016 10:56:59

Сообщение alair »

Так вроде и не должно работать.
Замените GPIOC->BSRR=GPIO_BSRR_BR13; //сбросили бит
На GPIOC->BRR=GPIO_BSRR_BR13; //сбросили бит
Друг Кота
Аватара пользователя
Сообщения: 7360
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Подкиньте идею в каком направлении копать. Хочу к stm32F051 подключить цветовой сенсор TCS3200, который выдаёт частоту в зависимости от интенсивности света. Максимальная частота может быть 600кГц, 120кГц или 12кГц. Т.е. могу выбрать любую. Каким образом можно на этом кристале померять частоту? У меня уже заняты TIM3 и 15. А из свободных входов есть все 4 TIM1_CH1-4 и TIM1_ETR. Пока как самое простое нашел как измерять период через каналы захвата (называется PWM input в RM), но может есть еще какой способ? Смотрел режим slave trigger mode, но похоже это только запускает счет, но не останавливает.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Мучитель микросхем
Аватара пользователя
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Сообщение Myp3ik »

Вам и нужен режим захвата PWM. По завершении захвата будет прерывание, в одном регистре будет период PWM, в другом - заполнение. А вообще там таймер можно настроить как угодно...
Иван Сусанин - первый полупроводник :solder:
Опытный кот
Аватара пользователя
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Сообщение baghear »

Друг Кота
Аватара пользователя
Сообщения: 7360
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Спасибо за отзывы, но режим захвата мне не очень нужен - у него время измерения зависит от измеряемой частоты. Правда забыл написать, что минимальная частота может быть 2 Гц. В моей ситуации это не будет никогда (если только разом не перегорят все светодиоды, хотя может просто отвалиться их питание), но тем не менее.

Просто месяц назад решал аналогичную задачу для микрочипа - надо было мерять период секундных импульсов от RTC в тактовых импульсах контроллера и подгонять эту же частоту, чтобы уменьшить отклонение, чтобы UART нормально работал. И там был применен именно trigger gated mode - один фронт запускал счет, второй - останавливал. Еще и в режиме одиночного запуска: прочитал значение, сделал коррекцию, и запустил для измерения следующего периода. Но в STM32F051 этого режима не нашел, а самый похожий и был режим захвата PWM. Но здесь мне нужен всё же режим подсчета импульсов за интервал времени.

Мне уже прислали исходник в котором используется один таймер как мастер задающий счетный интервал, для слейва, который и считает импульсы за этот интервал. Причем, мастер в режиме одноразового срабатывания. Т.е. я ручками выставляю код цвета - измеряю, меняю код - снова измеряю итд. А врежиме захвата я уже начал настраиваться, чтобы захваченные значения через ПДП заносились в массив в котором я буду высчитывать средний период итп. И как удачно, что слейвом является TIM1. Правда, мастер - TIM3, который у меня уже занят другими делами, но я посмотрел, что могу использовать взамен TIM2, TIM15 или TIM17. Хм, почему эту инфу надо искать по двум даташитам? разве нельзя сразу указать там где есть таблица доступных таймеров с числом каналов захвата итп. инфой? А то трудно распланировать, когда нужно найти кто может запускать АЦП, кто ПДП, а при переходе на другой кристалл, оказывается что этого таймера нет, а "соседний" или не умеет этого делать или работает с каналом ПДП, который занят каким-то другим ресурсом.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

[uquote="uldemir",url="/forum/viewtopic.php?p=3337575#p3337575"]режим захвата мне не очень нужен - у него время измерения зависит от измеряемой частоты[/uquote]
все равно ж нужен хоть один период для измерения - в STM32F0xx Snippet Examples есть пример - 03_InputCaptureOnTI1:
This example configures the TIM1 in order to compute the elapsed time between two rising edges occurring on its TI1 (channel 1).
Применял на практике - нужно было определять частоту 425Гц, использовал TIM14 - там как раз один канал захвата, работает четко.
Тут было еще на форуме про reciprocal frequency meter , пробовал практически на STM32F030F4P6 - тоже было в одной теме на форуме, но тему почистили.
Немного теории, правда AVR:
http://www.mshopf.de/proj/avr/freq_meter.html
на STM32F030F4P6, в случае reciprocal, задействовано было 2 таймера
Друг Кота
Аватара пользователя
Сообщения: 7360
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

В данном случае я не делаю частотомер, а просто опрашиваю датчик цвета. Т.е. мне нужно просто оценить отношение частот на выходе. Так что имхо, наоборот, отсутствие импульсов мне явно сообщит, что для данного канала цвета - темно. И не надо будет ждать полсекунды. Т.е. если я интервал измерения сделаю по 1ms, то через 4 с небольшим, я уже буду знать цвет.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

а в если использовать захват - то после двух положительных фронтов измеряемого сигнала
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

uldemir писал(а):Правда забыл написать, что минимальная частота может быть 2 Гц.
Каким образом это мешает измерению частоты методом ШИМ захвата?
Мучитель микросхем
Аватара пользователя
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Сообщение Myp3ik »

Таймер будет переполняться. А 32 разрядного таймера нет... Вернее есть, но он занят.
Иван Сусанин - первый полупроводник :solder:
Ответить

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