Notice: Memcache::get(): Server localhost (tcp 11211) failed with: Connection refused (111) in /home/a146/www/we.easyelectronics.ru/engine/lib/external/DklabCache/Zend/Cache/Backend/Memcached.php on line 134
STM32 / Поиск по тегам / Сообщество EasyElectronics.ru

Подключение дисплея UG-2896GDEAF11 к STM32L

Решил проверить качество и удобство использования современного небольшого OLED дисплея.





Читать дальше

Блок электронного зажигания на STM32VL DISСOVERY

Давно хотел иметь работающий настольный сувенир, такой как двигатель внутреннего сгорания. Есть такие, продаются в магазинах и в интернете. Качество и красота присутствуют, но цена немного не подходящая. (Восстановил одну из первых своих статей за 2011 год.)





Читать дальше

Проверка возможностей автомобильного генератора в качестве электродвигателя.

Решил провести эксперимент, по возможности использования генератора от легкового автомобиля, как тягового двигателя с прямым приводом на колесо, для велосипеда или что-либо подобного.
У меня как раз есть исправный генератор, но использовать его в автомобиль я не могу, как и некоторые другие вещи, но зато попробую провести этот эксперимент сам. В интернете на специализированных форумах есть размышления, что так не делают, что и в конструкции генератора специально особым образом подобраны формы ротора и статора, для работы его как генератора. Да и наличие отдельной катушки возбуждения усложняет конструкцию. Но из достоинств – генератор не создает практически никаких сопротивлений вращению, если на него не подан ток, и он есть за бесплатно. Заниматься самому математическим анализом реализации такой возможности, нет достаточного опыта и данных, пока (если кто разложит все по полочкам — буду признателен).
Схема подключения генератора:





Читать дальше

Фильтрация звука на STM32 с использованием КИХ фильтра

Давным-давно, в начале перестройки начали появляться у народа забавные тайваньские штучки, к примеру, часы электронные с кучей мелодий, или вот брелок к ключам, который на свист забывшего, где лежат эти ключи человека, откликался своим ответным пронзительным писком. В брелоке находился пьезо-излучатель, он же и микрофон, пара маленьких батареек и платка с залитой клеем микросхемой.




Читать дальше

Дружим программу CANHacker и модуль 2CAN от Starline

Прочитал замечательную статью на Хабре, habrahabr.ru/post/256493/:




Читать дальше

Использование модулей CAN на STM32 для разных целей

В последнее время, к сожалению, выросла цена на многие импортные радиодетали, в том числе и на отладочные платы с микроконтроллерами. А потребность в изготовлении разных поделок к счастью не пропала. Волей случая у меня в руках оказалось несколько интересных модулей от компании Starline, которая выпускает автомобильные сигнализации и много других полезных вещей (Можете поспрашивать у установщиков сигнализаций, или на сайте производителя). Целей раскрыть секреты работы этих модулей не стояло. Но ввиду их хорошего изготовления и оснащения оставить пропадать их без дела наше время тоже нехорошо.
Вкратце о модулях:
Модуль CAN — STM32F103RBT8 + SST25V016 + TJA1042, силовые ключи, микросхемы питания.
Модуль 2CAN — STM32F105RBT8 + SST25V032 + TJA1048, микросхемы питания.





Читать дальше

Keil MDK Version 5 - бесплатно для STM32L0 and STM32F0

Пробовал Keil и случайно наткнулся на страницу на keil.com
Оказывается для STM32L0 и STM32F0 они дают среду бесплатно и без ограничений:
http://www2.keil.com/stmicroelectronics-stm32/mdk

STM32F030F4 задержки

Функция delay() при помощи таймера TIM16

Сперва инициализация

void TIM16_init(void){
  NVIC_InitTypeDef NVIC_InitStructure;
  TIM_TimeBaseInitTypeDef TIM_InitStructure; 

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM16, ENABLE);

  NVIC_InitStructure.NVIC_IRQChannel = TIM16_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPriority = 0x01;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);  
  
  TIM_InitStructure.TIM_Period = 1;
  TIM_InitStructure.TIM_Prescaler = 400;
  TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  TIM_InitStructure.TIM_RepetitionCounter = 0;
  TIM_TimeBaseInit(TIM16, &TIM_InitStructure);

  TIM_ITConfig(TIM16, TIM_IT_Update, ENABLE);
  TIM_Cmd(TIM16, ENABLE);
}


400 реально мэджик нумбер подобраный осцилографом. )) Как оно рассчитывается в теории понятно, но на практике что-то не очень. Вообщем это дает нам прерывание таймера каждые 100 микросекунд.


static volatile uint16_t delay_counter = 0;
void TIM16_IRQHandler(void) {
    if (TIM_GetITStatus(TIM16, TIM_IT_Update) != RESET) {
        delay_counter++;
        TIM_ClearITPendingBit(TIM16, TIM_IT_Update);
    }
}


И собственно функции задержки:

void delay_100us(void) {    // задержка 100 uS
  delay_counter = 0;
  while (!delay_counter);
}

void delay_ms(int ms) {    // задержка N mS
  int i;
  for(i=0;i<ms*10;i++) {
    delay_100us();
  }
}


Код мне кажется не очень оптимальным, — вот как чувствую грабли, — послушал бы ваши замечания.

Использвание (мигание светодиодом):

  while(1)
  {
     GPIO_SetBits(GPIOA, GPIO_Pin_4);
     delay_ms(500);
     GPIO_ResetBits(GPIOA, GPIO_Pin_4);
     delay_ms(500);
  }

STM32F030F4 прерывания

Прерывание дело несложное. Единственный ньюанс — не забудьте подключить файлы startup_stm32f030.s и system_stm32f0xx.c (находятся в архиве с SPL, папка STM32F0xx_StdPeriph_Lib_V1.5.0\Libraries\CMSIS\Device\ST\STM32F0xx\Source\Templates\), иначе прерывание закончится вызовом HardFault_Handler.

Например, прерывание по кнопке. Кнопку подключаем к PA0 и земле. И от PA0 подтягивающий резистор к плюсу питания.

Инициалазация

  EXTI_InitTypeDef   EXTI_InitStructure;
  NVIC_InitTypeDef   NVIC_InitStructure;

  /* Configure PA0 pin as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Enable SYSCFG clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
  /* Connect EXTI0 Line to PA0 pin */
  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);

  /* Configure EXTI0 line */
  EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);

  /* Enable and set EXTI0 Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);


Обработчик

void EXTI0_1_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line0) != RESET) {

    // делаем что-нибудь полезное  

    /* Clear the EXTI line 0 pending bit */
    EXTI_ClearITPendingBit(EXTI_Line0);
  }
}

STM32F030F4 SPI

Минздрав предупреждает: данный материал может оскорбить чувства профессионалов и зануд.



Читать дальше