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

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

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

Сообщение Myp3ik »

slavokhire5, можно AES-128 позаимствованный у инструментов из техаса. Есть и у ST библиотеки шифрования.
Вложения
slaa397a.pdf
(460.9 КБ) 627 скачиваний
AES_128.zip
(14.94 КБ) 233 скачивания
Иван Сусанин - первый полупроводник :solder:
Pokemon4ik2008
Родился
Сообщения: 2
Зарегистрирован: Сб фев 28, 2009 02:18:17
Откуда: Украина

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

Сообщение Pokemon4ik2008 »

Здравствуйте!
Решил попробовать stm32 на практике и купил себе http://www.micro4you.com/store/hy-mini-stm32v.html .
Нашел небольшую бибилиотеку для работы с тач панелью на экране, но при попытке собрать бинарник получаю ошибки.

/home/artem/workspaceARM/LCD/Release/../system/include/TouchPanel/TouchPanel.c:59: undefined reference to `SPI_Cmd'
/home/artem/workspaceARM/LCD/Release/../system/include/TouchPanel/TouchPanel.c:70: undefined reference to `SPI_Init'
/home/artem/workspaceARM/LCD/Release/../system/include/TouchPanel/TouchPanel.c:72: undefined reference to `SPI_Cmd'

в файле TouchPanel.c подключены
#include "TouchPanel.h"
#include "SysTick/systick.h"
#include "GLCD/GLCD.h"
#include "stm32f10x_spi.h"
#include "stm32f10x_tim.h"

Также просто пытался инициализировать spi в функции main и получил теже ошибки undefined reference to `SPI_Init'.

Вот проект https://www.dropbox.com/s/ht88qghhkw8zmss/LCD_Touch.zip
У меня Mint 17, Eclipse Luna Release (4.4.0).

Заранее благодарен за помощь!
Demon
Нашел транзистор. Понюхал.
Сообщения: 164
Зарегистрирован: Сб янв 20, 2007 20:44:33
Откуда: Из закаулков вашей души

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

Сообщение Demon »

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

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

Сообщение uk8amk »

При работе с энкодером таймер функционирует в режиме внешнего тактирования.
Прерывания могут генерироваться в следующих случаях:
*переполнение счётного регистра;
*совпадение счетного регистра с содержимым одного из регистров захвата-сравнения.

Для решения проблемы можно загрузить в ARR=1. Тогда таймер будет генерировать переполнение каждый второй такт от энкодера. Другой путь и мне кажется что он более правильный - опрашивать CNT через довольно короткие промежутки времени, программно вычислять разницу значений, чтобы определить было ли движение механизма.
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

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

Сообщение shads »

Накидайте кому не лень ссылки на материальчик, как стартануть в KEIL, и если можно где его (KEIL) качнуть...
Есть такие контроллеры http://www.aliexpress.com/item/Free-shi ... 72128.html
и такой программатор http://de1fer.ru/?p=146
Demon
Нашел транзистор. Понюхал.
Сообщения: 164
Зарегистрирован: Сб янв 20, 2007 20:44:33
Откуда: Из закаулков вашей души

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

Сообщение Demon »

uk8amk писал(а):Дл


Может загрузить ARR=4 (один "щелчок" энкодера это CNT+4 )?
Подскажите как записать во флеш большой массив? (Аналог для CVAVR: flash unsigned int Tab[]={....... }; )
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

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

Сообщение uk8amk »

Там по документации смотреть конкретно что на сколько делится. Ну вобщем про ARR вы поняли.
Положить в FLASH - достаточно написать модификатор const, по крайней мере в Keil так.

и если можно где его (KEIL) качнуть...


На keil.com сходить не пробовали?
DimAlt
Вымогатель припоя
Сообщения: 576
Зарегистрирован: Пт май 19, 2006 05:39:11
Контактная информация:

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

Сообщение DimAlt »

Привет. Подскажите, как правильно настроить работу таймера энкодером. Энкодер механика, проработал месяц и начал дрожать. Инициализация такая:

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

//8мег, pin encoder
#define T3_CH1      A, 6, H
#define T3_CH2      A, 7, H

RCC->APB2ENR|=RCC_APB2ENR_IOPAEN;
RCC->APB1ENR|=RCC_APB1ENR_TIM3EN;

pmode(T3_CH1, PIN_CFG_IP);
pmode(T3_CH2, PIN_CFG_IP);
on(T3_CH1);//установить высокий уровень
on(T3_CH2);

TIM3->CCMR1=TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0 | TIM_CCMR1_IC2F | TIM_CCMR1_IC1F;   //IC1 на TI1,IC2 на TI2
TIM3->CCER=0;
TIM3->SMCR= TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0 | TIM_SMCR_ETF;      //011: Encoder mode 3
   //TIM_SMCR_ETF - он не нужен но пусть будет
TIM3->ARR=0xFFFF;
TIM3->CR1=TIM_CR1_CEN;//Counter enable
TIM3->EGR|=TIM_EGR_UG;

Что еще можно предпринять, чтобы убрать дребезг энкодера.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Demon писал(а):Подскажите как записать во флеш большой массив? (Аналог для CVAVR: flash unsigned int Tab[]={....... }; )



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

const uint16_t Tab[]={....... };


shads писал(а): и если можно где его (KEIL) качнуть...


Я же давал тебе ссылку- http://rutracker.org/forum/viewtopic.php?t=2305709
Квикстарт http://forum.chipmk.ru/index.php/topic/ ... %80%D1%82/
Единственное в новых версиях манипуляции с CMSIS уже не нужны , все есть в дистрибутиве.
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

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

Сообщение amv2000 »

Добрый вечер! Будьте так любезны подсказать как работает этот джойстик http://ru.aliexpress.com/item/Free-Ship ... nVersion=1
Кнопка замыкается на землю(GND-SW), а вправо-влево, вверх-вниз меняется сопротивление. Собственно выводы URx, URy получается надо привязывать к АЦП ?
Никто не баловался, может есть пример .
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

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

Сообщение amv2000 »

Насчет джойстика мысль была правильной. Подключаем выводы URx, URy на вход каналов АЦП и соответственно настраиваем.
АЦП с DMA: (здесь просто взял пример из интернета)

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

void ADCInitRegular(void )
{
  if( (RCC->APB2ENR & RCC_APB2ENR_ADC1EN) == 0) // Проверка - возможно уже подано тактирование
  {
    RCC->APB2ENR |=  RCC_APB2ENR_ADC1EN;  // Подаем тактирование на АЦП 1
 
    ADC1->CR2 |= ADC_CR2_CAL;             // Запуск калибровки АЦП
    while (!(ADC1->CR2 & ADC_CR2_CAL));   // Ждем окончания калибровки
  }
 
  ADC1->CR2 |= ADC_CR2_EXTSEL;          // Преобразование регулярной группы
  ADC1->CR2 |= ADC_CR2_EXTTRIG;         // Разрешаем внешний запуск регулярной группы
  ADC1->CR2 |= ADC_CR2_CONT;            // Преобразования запускаются одно за другим
  ADC1->CR2 |= ADC_CR2_DMA;             // Подключаем DMA
  ADC1->CR1 |= ADC_CR1_SCAN;            // Сканирование группы каналов - без него больше одного канала не запустить
 
  /* Задаем длительность выборки */
  ADC1->SMPR2 |= (ADC_SMPR2_SMP4_2 | ADC_SMPR2_SMP4_1 | ADC_SMPR2_SMP4_0);   
 
  /* Настраиваем каналы */
  ADC1->SQR1 |= (3<<20);        // 11 - Четыре канала
  ADC1->SQR3 |= (4<<15) | (5<<10) | (6<<5) | 7; // Сами номера каналов

  ADC1->CR2 |= ADC_CR2_ADON;    // Теперь включаем АЦП

  /* Запуск преобразований */
  ADC1->CR2 |= ADC_CR2_SWSTART;       // Запускаем преобразования регулярной группы 
}

#define ADC1_DR_Address    ((uint32_t)0x4001244C)

void DMA_Ch1_Init(uint32_t* Buff)
{
  RCC->AHBENR |= RCC_AHBENR_DMA1EN;             //Разрешаем тактирование DMA
 
  DMA1_Channel1->CCR  =  0;
  DMA1_Channel1->CCR &= ~DMA_CCR1_DIR;          //Напрвление передачи: из переферии в память
  DMA1_Channel1->CCR |=  DMA_CCR1_CIRC;         //Циклический режим - постоянная передача
  DMA1_Channel1->CCR &= ~DMA_CCR1_PINC;         //Инкремент указателя переферии - выключен (регистр то один)
  DMA1_Channel1->CCR |=  DMA_CCR1_MINC;         //Инкремент указателя памяти (буффера) - включен (у нас ведь массив)
  DMA1_Channel1->CCR |=  DMA_CCR1_PSIZE_1;      //Размерность регистра даных в периферии - 32 бит
  DMA1_Channel1->CCR |=  DMA_CCR1_MSIZE_1;      //Размерность яейки в памяти - 32 бит (uint32_t)
  DMA1_Channel1->CCR &= ~DMA_CCR1_MEM2MEM;      //Режим обмена память-память - выключен
 
  DMA1_Channel1->CPAR = ADC1_DR_Address;        //Адрес регистра переферии
  DMA1_Channel1->CMAR = (uint32_t)Buff;         //Адрес начала буффера
 
  DMA1_Channel1->CNDTR = sizeof(Buff);//4;      //Количество данных, которые нужно передавать (типа размер буффера)
 
  DMA1_Channel1->CCR |= DMA_CCR1_EN;            //Включаем
}

А в цикле смотрю по зажиганию светодиодов.(Y повесил на ADC10 - PA11)

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

int main(void) 
{   
  Initall();               //инициализируем порты и таймеры
  ADCInitRegular();
 
  uint32_t Buffer[4];
  DMA_Ch1_Init(Buffer);
  int value_Y;
 
 
// Основной цикл: ----------
 
  for(;;)
  {
      value_Y = Buffer[3];
      if(value_Y < 300) PIN_ON(LED_BLUE);
      if(value_Y > 2100) PIN_ON(LED_GREEN);
  }
}

Помогла заметка здесь http://cxem.net/arduino/arduino68.php
titoFF
Встал на лапы
Сообщения: 100
Зарегистрирован: Пт авг 02, 2013 07:20:04

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

Сообщение titoFF »

Не могу разобраться с SysTick. Вроде ничего сложного и код элементарен, однако ничего не получается. Код должен зажечь светодиод на PD12, а потом, в обработчике прерывания SysTick зажечь светодиод на PD13

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

#include <stm32f4xx.h>
#include <stm32f4xx_gpio.h>
#include <stm32f4xx_rcc.h>
#include <stm32f4xx_tim.h>
#include <misc.h>


int main(void)
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_Struct;
GPIO_Struct.GPIO_Pin=GPIO_Pin_0;
GPIO_Struct.GPIO_Mode=GPIO_Mode_IN;
GPIO_Struct.GPIO_PuPd=GPIO_PuPd_DOWN;
GPIO_Init(GPIOA, &GPIO_Struct);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
GPIO_Struct.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_13;
GPIO_Struct.GPIO_Mode=GPIO_Mode_OUT;
GPIO_Init(GPIOD, &GPIO_Struct);

GPIO_SetBits(GPIOD,GPIO_Pin_12);

SysTick_Config(SystemCoreClock/12000000);

while(1)
{
}
}
void SysTick_Handler()
{
GPIO_SetBits(GPIOD,GPIO_Pin_13);
}


Что примечательно, даже не загорается светодиод на 12м пине GPIOD. Если закомментировать строчку

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

SysTick_Config(SystemCoreClock/12000000);

То светодиод PD12 горит.
Среда CooCox, плата STM32F4DISCOVERY.
Что уже только не делал- если строчка раскомментирована, то ничего не работает.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

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

Сообщение urry »

GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

urry писал(а):GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;


По дефолту и так пуш-пул , пулдаун и на здесь не нужен , скорость так же .
А вот то что цикл в main пустой могло и сыграть с вопрошающим злую шутку... :)))
titoFF
Встал на лапы
Сообщения: 100
Зарегистрирован: Пт авг 02, 2013 07:20:04

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

Сообщение titoFF »

При чем здесь Настройка порта А, она вообще в наследство от предыдущей программы досталась и не играет никакой роли. Светодиоды должны загораться на D. И один из них загорается, пока не добавлю строчку с инициализацией SysTick. Пустой цикл проверю, но без строчки инициализации светодиод, который зажигается в начале программы загорается не смотря на пустой цикл.

Проверил, пустой цикл роли не играет. Настройку порта А закомментировал, прерывание пробовал разрешать, не помогает. У кого- нибудь вообще работает этот таймер? Если да- поделитесь рабочим кодом для CooCox.
Последний раз редактировалось titoFF Вт сен 16, 2014 13:23:04, всего редактировалось 1 раз.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

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

Сообщение HHIMERA »

А что... отладкой вера не позволяет пользоваться???
Наставьте между строчками по два-три NOP'а... уменьшите делитель в SysTick_Config(SystemCoreClock/12000000); до 1000... и посмотрите что к чему и почему... это же не трудно... и к этому всё равно привыкать придётся...
"Я не даю готовых решений, я заставляю думать!"(С)
titoFF
Встал на лапы
Сообщения: 100
Зарегистрирован: Пт авг 02, 2013 07:20:04

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

Сообщение titoFF »

Вера позволяет. Но в отладчике я вижу фигу. Строки выполняются, но светодиоды оба не горят.
Разобрался. В качестве параметра функции передал константу и все заработало.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

бЕДА!!
Подкинте пожалуйста кто-нибудь пример реализации (или нормальную статью) usb hid. Пошагово, где и что нужно настроить для корректной работы USB.
Взял кейловский пример usb hid. Подменил порты, но он вылетел сначала в ошибку с stm32f10x_lib.h, а после того, как я его заменил на stm32f10x.h вообще выдал 63 ошибки.. На буржуйских сайтах вычитал, что это старый и не адаптированный под новое ПО пример.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Нашаманил такой проект, но он мне валит ошибки
..\USBLib\inc\platform_config.h(37): error: #35: #error directive: "Missing define: USE_STM3210B_EVAL, USE_STM3210E_EVAL"
#error "Missing define: USE_STM3210B_EVAL, USE_STM3210E_EVAL"
..\USBLib\Src\main.c: 0 warnings, 1 error

И таких подобных 15 штук.

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

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

Сообщение uk8amk »

Кое-какая информация по надежности контроллеров STM32.
Была собрана экспериментальная партия силовых устройств(индуктивная нагрузка единицы киловатт) на STM32F100.
В процессе экспериментов и доведении схемы до ума выгорали транзисторы IGBT c хорошим фейерверком. В ходе этого в ряде случаев почему-то умирали STM32. Что-то пробивалось в кристалле и замыкало цифровое питание VDD-VSS. Причём остальные корпуса логики на плате и отладочный пульт с атмегой и экраном от нокии оставались целыми.
По всем питаниям имеются супрессоры, а управление от силовой части отвязано оптодрайверами.
Из этого я делаю заключение, что применять STM32 в мощных источниках питания в принципе можно, но осторожно. Дуга на расстоянии 5-6 см может убить кристалл.
Ответить

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