Программирование 32-х разрядных МК

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Всё больше народу на форуме интересуется микроконтроллерами STM32( и не только), давайте же делиться опытом, идеями, проетами!

Начну с себя.

Конфигурация IDE: EmBitz IDE + ST-Link Utility

UPD: перешел на Keil-MDK v4.74

UPD: Keil v5.21

Пишу:

- для STM32F030 - CMSIS

- для EFM32ZG - CMSIS

diger67
Offline
Зарегистрирован: 25.07.2015

 Работаю с линейкой f10x и f4xx. Сначала купил NUCLEO на 103rbt, продолжил 103с8t6, 103vet, 303с8t6, 407vg и 429zg. Сейчас купил с 10 плат под 48 и 144 выводные мк, спаял платки на 103с8t6 и 429. Сижу экспириментирую, изучаю. Что удалось. Запустил tft по fsmc и SPI, понял принцип работы DMA, Разобрался с работой CAN и его фильтрами. Подключил энкодер и в софтовом и в хардовом режиме. Поковырял таймера. Попробовал как записывать и изменять память внешней SPI EEPROM 25w128. Жду SRAM 8 Мбайт  и NAND flash 1 Мбайт. Про PWM, DAC, USB что то вразумительное пока сказать не смогу. Использую Keil и CooCox SPL, использовать в чистом виде CMSIS считаю не целесообразно, но ознакомится не помешает.

diger67
Offline
Зарегистрирован: 25.07.2015

Веду работу по созданию чего то похожего на видяху. Железо stm32f429, первончально 8 метров SRAM, потом попробую SDRAM. Flash spi 128 Mbit или параллельная 16 bit на 1 метер. Должно получиться достаточно шустрая штука. В Nextion ставят stm 72 МГц, у 429 тактовая частота 180 МГц.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Ничегоси!
А я таки попробовал влезть в Keil, получил бесплатную лицензию для МК STM32F0xx, правда, свой F4P6 нашёл только в версии 4.74. В Em::Blocks было полегче, но надо б переходить на общепризнанные инструменты.

diger67
Offline
Зарегистрирован: 25.07.2015

Yarik.Yar пишет:
Ничегоси! А я таки попробовал влезть в Keil, получил бесплатную лицензию для МК STM32F0xx, правда, свой F4P6 нашёл только в версии 4.74. В Em::Blocks было полегче, но надо б переходить на общепризнанные инструменты.

На просторах интернета можно найти таблетку к Keil снимающую ограничение на размер компилируемого кода. Тогда можно работать с любым контроллером без ограничений. Что касается использования библиотек чипов не вошедших в 5 версию Keil, то нужно при создании проекта отказаться от автоматического создания проекта и создать дерево проекта самому. Как это сделать есть множество статей в интернете.

diger67
Offline
Зарегистрирован: 25.07.2015

Пришла SRAM память. Буду пробовать что получится в итоге.

diger67
Offline
Зарегистрирован: 25.07.2015

:((( Наткнулся на грабли. Похоже FMC в 429 упорно не хочет работать с  SRAM и TFT. На днях прийдет 407ZGT буду пробовать его. Потеря 12 МГц в такте плохо, но не критично.

Терпение и труд сделали свое дело. Оказалось что проверять работу SRAM в пошаговом режиме нельзя, видимо сбиваются временные интервалы. В режиме дебага, когда функции записи и чтения в SRAM отрабатывают без остановок все записывается и считывается. Продолжкю рыть дальше.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

UPD: Прикрутил ST7735 к STM32F030 через SPI (пока что программный). Портировал пару функций из Adafruit_GFX, теперь могу рисовать окружности и линии) Вот и проблема с килем - нет win1251 в 4.74 версии. А у меня под неё всё заточено:(

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

В 5.17 есть 1251

diger67
Offline
Зарегистрирован: 25.07.2015

Вот пример инициализации на stm32f4 для spi и i2c

#include "spi.h"



//---------------------------------------------------------------
void I2C_StartTransmission(I2C_TypeDef* I2Cx, uint8_t transmissionDirection,  uint8_t slaveAddress)
{
 while(I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY));
 I2C_GenerateSTART(I2Cx, ENABLE);
 while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT));
 I2C_Send7bitAddress(I2Cx, slaveAddress, transmissionDirection);
 if(transmissionDirection== I2C_Direction_Transmitter)
    {
     while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
    }
 
    if(transmissionDirection== I2C_Direction_Receiver)
    {
 while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
    }
  
}

//---------------------------------------------------------------
//
//
//---------------------------------------------------------------
void I2C_WriteData(I2C_TypeDef* I2Cx, uint8_t data)
{
    I2C_SendData(I2Cx, data);
    while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
}

//---------------------------------------------------------------
//
//
//---------------------------------------------------------------
uint8_t I2C_ReadData(I2C_TypeDef* I2Cx)
{
 uint8_t data_i2c;
 while( !I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_RECEIVED));
 data_i2c = I2C_ReceiveData(I2Cx);
 return data_i2c;
}

//---------------------------------------------------------------
//
//
//---------------------------------------------------------------
void write_i2c(uint16_t address, uint8_t data)
{
 uint8_t hw_addr;
  
 hw_addr = EEPROM_HW_ADDRESS | (address) >> 8;
 
 I2C_GenerateSTART(I2C2, ENABLE);
 while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));
 I2C_Send7bitAddress(I2C2, hw_addr, I2C_Direction_Transmitter);
 while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
 //I2C_SendData(I2C2, (uint8_t)((address & 0xFF00) >> 8));
 //while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
 I2C_SendData(I2C2, (uint8_t)(address & 0x00FF));
 while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
 I2C_SendData(I2C2, data);
 while (!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
 I2C_GenerateSTOP(I2C2, ENABLE);
 delay_ms(5);
}

//---------------------------------------------------------------
//
//
//---------------------------------------------------------------
uint8_t read_i2c(uint16_t address)
{
 uint8_t data_i2c, hw_addr;
  
 hw_addr = EEPROM_HW_ADDRESS | (address & 0xFF00) >> 8;
 
 while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY));
 I2C_GenerateSTART(I2C2, ENABLE);
 while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));
 I2C_Send7bitAddress(I2C2, hw_addr, I2C_Direction_Transmitter);
 while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
 I2C_SendData(I2C2, (uint8_t)(address & 0x00FF));
 while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
 I2C_GenerateSTART(I2C2, ENABLE);
 while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));
 I2C_Send7bitAddress(I2C2, EEPROM_HW_ADDRESS, I2C_Direction_Receiver);
 while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_RECEIVED));
 data_i2c=I2C_ReceiveData(I2C2);
 I2C_GenerateSTOP(I2C2, ENABLE);
 
 return data_i2c;
}

//---------------------------------------------------------------
//
//
//---------------------------------------------------------------
void LCD_Write_COM(uint16_t data)
{
 //uint8_t cl, ch;
 //c = data << 8;
 COM();
 //delay(5);
 //SS_ON();
 //COM();
 //delay(5);while 
 while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
 SPI_I2S_SendData(SPI1, data);
 while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET){}
 //while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
 DATA();
 //SS_OFF();
 
}

//---------------------------------------------------------------
//
//
void LCD_Write_DATA(uint16_t data)
{
 //uint8_t c;
 //c = data << 8;
 //delay(5);
 //SS_ON();
 //DATA();
 //delay(5);
 while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
 SPI_I2S_SendData(SPI1, data);
 while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET){}
 //while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
 //SS_OFF();
}

//---------------------------------------------------------------
//
//
/*
//---------------------------------------------------------------
void LCD_Write_DATA_C(uint16_t data)
{
 uint8_t ch, cl;
 cl = data;
 ch = data >> 8;
 //DATA();
 SS_ON();
 //delay(5);
  SPI_I2S_SendData(SPI1, ch);
  //while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET){}
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
  SPI_I2S_SendData(SPI1, cl);
  //while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET){}
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
 SS_OFF();
}
*/
//---------------------------------------------------------------
//
//
//---------------------------------------------------------------
void spi_init(void)
{
 SPI_InitTypeDef SPI_init_user;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

 SPI_init_user.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
 SPI_init_user.SPI_Mode = SPI_Mode_Master;
 SPI_init_user.SPI_DataSize = SPI_DataSize_8b;
 //SPI_init_user.SPI_DataSize = SPI_DataSize_16b;
 SPI_init_user.SPI_CPOL = SPI_CPOL_High;
 SPI_init_user.SPI_CPHA = SPI_CPHA_2Edge;
 SPI_init_user.SPI_NSS = SPI_NSS_Soft;
 SPI_init_user.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
 SPI_init_user.SPI_FirstBit = SPI_FirstBit_MSB;
 SPI_init_user.SPI_CRCPolynomial = 7;
 SPI_Init(SPI1, &SPI_init_user);

 SPI_I2S_DMACmd(SPI1, SPI_I2S_DMAReq_Tx, ENABLE);
 SPI_Cmd(SPI1, ENABLE);
}

//---------------------------------------------------------------
//
//
//---------------------------------------------------------------
void i2c_init(void)
{
 I2C_InitTypeDef i2c_init;
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);
 
 i2c_init.I2C_ClockSpeed = 200000;
 i2c_init.I2C_Mode = I2C_Mode_I2C;
 i2c_init.I2C_DutyCycle = I2C_DutyCycle_2; //I2C_DutyCycle_16_9; //
 i2c_init.I2C_OwnAddress1 = 0x20;
 i2c_init.I2C_Ack = I2C_Ack_Disable; //I2C_Ack_Enable; //
 i2c_init.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
 
 I2C_Init(I2C2, &i2c_init);
 I2C_Cmd(I2C2, ENABLE);
}

//---------------------------------------------------------------
//
//
//---------------------------------------------------------------
void gpio_spi_init (void)
{
 GPIO_InitTypeDef GPIO_Init_SPI;
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
 
 GPIO_Init_SPI.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
 GPIO_Init_SPI.GPIO_Mode = GPIO_Mode_AF;
 GPIO_Init_SPI.GPIO_OType = GPIO_OType_PP;
 GPIO_Init_SPI.GPIO_PuPd = GPIO_PuPd_NOPULL;
 GPIO_Init_SPI.GPIO_Speed = GPIO_High_Speed;
 GPIO_Init(GPIOA, &GPIO_Init_SPI);
 
 GPIO_Init_SPI.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_0 | GPIO_Pin_1|GPIO_Pin_8;
 GPIO_Init_SPI.GPIO_Mode = GPIO_Mode_OUT;
 GPIO_Init_SPI.GPIO_OType = GPIO_OType_PP;
 GPIO_Init_SPI.GPIO_PuPd = GPIO_PuPd_NOPULL;
 GPIO_Init_SPI.GPIO_Speed = GPIO_Fast_Speed; //GPIO_High_Speed;
 GPIO_Init(GPIOA, &GPIO_Init_SPI);
 
 GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
 GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
 GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
}

//---------------------------------------------------------------
//
//
//---------------------------------------------------------------
void gpio_i2c_init(void)
{
 GPIO_InitTypeDef GPIO_Init_I2C;
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
 
 GPIO_Init_I2C.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
 GPIO_Init_I2C.GPIO_Mode = GPIO_Mode_AF;
 GPIO_Init_I2C.GPIO_OType = GPIO_OType_OD; //GPIO_OType_PP; //
 GPIO_Init_I2C.GPIO_PuPd = GPIO_PuPd_UP; //GPIO_PuPd_NOPULL; //
 GPIO_Init_I2C.GPIO_Speed = GPIO_High_Speed;
 GPIO_Init(GPIOF, &GPIO_Init_I2C);
  
 GPIO_PinAFConfig(GPIOF, GPIO_PinSource0, GPIO_AF_I2C2);
 GPIO_PinAFConfig(GPIOF, GPIO_PinSource1, GPIO_AF_I2C2);
}


#ifndef _SPI_H_
#define _SPI_H_

#include "stm32f4xx.h"

#define SCK GPIO_Pin_13
#define MISO GPIO_Pin_14
#define MOSI GPIO_Pin_15
#define SS GPIO_Pin_4
#define RS GPIO_Pin_0
#define RST GPIO_Pin_1

#define CS_LOW() GPIO_ResetBits(GPIOA, GPIO_Pin_4) //low
#define CS_HIGH() GPIO_SetBits(GPIOA, GPIO_Pin_4) //high
#define SS_ON() GPIO_ResetBits(GPIOA, GPIO_Pin_8) //low
#define SS_OFF() GPIO_SetBits(GPIOA, GPIO_Pin_8) //high
#define COM() GPIO_ResetBits(GPIOA, GPIO_Pin_0) //low
#define DATA() GPIO_SetBits(GPIOA, GPIO_Pin_0)  //high
#define RST_ON() GPIO_ResetBits(GPIOA, GPIO_Pin_1) //low
#define RST_OFF() GPIO_SetBits(GPIOA, GPIO_Pin_1) //high

//#define slaveAddress      0xA0
#define EEPROM_HW_ADDRESS       0xA0   /* E0 = E1 = E2 = 0 */



void spi_init(void);
void i2c_init(void);
void gpio_spi_init(void);
void gpio_i2c_init(void);
void LCD_Write_COM(uint16_t data);
void LCD_Write_DATA(uint16_t data);
//void LCD_Write_DATA_C(uint16_t data);
void I2C_StartTransmission(I2C_TypeDef* I2Cx, uint8_t transmissionDirection,  uint8_t slaveAddress);
void I2C_WriteData(I2C_TypeDef* I2Cx, uint8_t data);
uint8_t I2C_ReadData(I2C_TypeDef* I2Cx);
void write_i2c(uint16_t address, uint8_t data);
uint8_t read_i2c(uint16_t address);

extern void delay_ms(uint16_t delay);

#endif

 

diger67
Offline
Зарегистрирован: 25.07.2015

Yarik.Yar пишет:

UPD: Прикрутил ST7735 к STM32F030 через SPI (пока что программный). Портировал пару функций из Adafruit_GFX, теперь могу рисовать окружности и линии) Вот и проблема с килем - нет win1251 в 4.74 версии. А у меня под неё всё заточено:(

У меня проблемм с кирилицей не возникло, перенес Adafruit на С, взял файл знакогенератора со своего проекта от arduino и все работает. Вывожу текст и по русски и по английски. Добил функции преобразования string to float и float to string.

 

#include "Wstring.h"

  
  
float StrTofloat(void)
{ 
  double a, b;
  char buffer [256] = {0x31, 0x32, 0x2E, 0x35, 0x30, 0x31};
  //printf ( "Input: " );
  //gets (buffer);
  a = atof (buffer);
  b = a/2;
  //printf ( "a= %f and b= %f\n" , a, b );
  return a;
}  

#ifndef _WSTRING_H_
#define _WSTRING_H_

//#include <stdio.h>
#include <stdlib.h>
#include "string.h"
#include "stm32f4xx.h"


float StrTofloat(void);


#endif

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

kisoft, я знаю. Но хочу 4ю версию. Значит, буду на забугорном все писать/выводить)

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Я перенес из своего проекта на f103 с Em::Bitz. Было для 1251 сделано, переделать на UTF надо.

diger67
Offline
Зарегистрирован: 25.07.2015

Yarik.Yar , посмотрел библиотеку на stm32f030. Порадовал spi, там очень широкий список по ширине пердачи от 4 до 16  bit. Надо взять на заметку, потому как есть не мало перефирийных микросхем с нестандартной шириной передачи. Вот так не подозревая ни чего, узнаешь что то новое. Спасибо.

a5021
Offline
Зарегистрирован: 07.07.2013

Периферия у f0 новее и продвинутее, чем у f1. Часто f030 удобнее использовать, хоть он и слабее f103, если сравнивать в лоб.

diger67
Offline
Зарегистрирован: 25.07.2015

a5021 пишет:

Периферия у f0 новее и продвинутее, чем у f1. Часто f030 удобнее использовать, хоть он и слабее f103, если сравнивать в лоб.

Я мучаю stm32f429, f0 мне интересен только из за spi. Есть минус, нет USB.

diger67
Offline
Зарегистрирован: 25.07.2015

Приехала Flash память на 1Мбайт 16 бит. Установлю на плату. Теперь все составляющие для проекта в сборе.

a5021
Offline
Зарегистрирован: 07.07.2013

diger67 пишет:

Я мучаю stm32f429,

Пардон. В одном из последних сообщений упоминался f103 и видно я на него засмотрелся. :)

Цитата:
f0 мне интересен только из за spi. Есть минус, нет USB.

Куда ж девался? Есть и юсб там у моделей постарше.

diger67
Offline
Зарегистрирован: 25.07.2015

a5021, городить несколько многоножек (100 и более) в одном устройсве мовитон. А так мне и 030c8t6 хватит, тем более платки пустые под 48 ног лежат. Соберу и в путь.

diger67
Offline
Зарегистрирован: 25.07.2015

Продолжаю рыть под Extern SRAM. Наконец заставил проц без ошибок сохранять в нее буффер. Мозг пришлось поломать, прочитать кучу бесполезных монологов "профи". Ответ не нашел пока не углубился в доки и примеры от производителя ST. Теперь у проектируемого модуля 8 с гаком метров RAM. С Flash прийдется делать платку, на купленной плате оказалась разводка под NAND.

Logik
Offline
Зарегистрирован: 05.08.2014

Пишу в stm32f103c8t6 под иде 1.6.5 . Есть бага при работе с динамическим распределением памяти. Обявляю буфер на 10-12кБ статический - ок, вместо него пробую динамический - вроде память выделяет, но при взаписи в неё ребутится. Воще этот STM - х..ня, от железа и до софта. Похож на тарифы оператора мобильной связи - обещает золотые горы, но надо читать сноски мелким шрифтом, а на деле ещё хуже будет.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Х..ня это писать для STM в Arduino IDE... Мыши плакали, кололись, но продолжали жрать кактус... Для STM пишут в нормальных средах типа Keil, IAR, Eclipse и основаных на ней CooCox, Atollic TrueSTUDIO, AC6 System Workbench.

diger67
Offline
Зарегистрирован: 25.07.2015

Stm хорошая платформа для разработок. Большой набор пириферии. Главное грамотно ее настроить.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Arduino IDE наше Фсё, лучше извратиться, сожарться кактус, чем использовать нормальные среды. Это точно, ЗАЧЕМ?

Например, Keil, бесплатный до 32 КБ кода. Для начала - убиться и не встать, вполне достаточно.

Впрочем, ладно, как угодно

diger67
Offline
Зарегистрирован: 25.07.2015

К Keil есть таблетко. Пользуюсь полноценно. Все путем.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Таблетками не пользуюсь. M0 бесплатно независимо от размера, официально, а я как раз его и юзаю.

Logik
Offline
Зарегистрирован: 05.08.2014

Jeka_M пишет:

Х..ня это писать для STM в Arduino IDE... Мыши плакали, кололись, но продолжали жрать кактус... Для STM пишут в нормальных средах типа Keil, IAR, Eclipse и основаных на ней CooCox, Atollic TrueSTUDIO, AC6 System Workbench.

Х..ня  это еще и указывать кому в чем писать. Я изложил о факте обнаруженого бага. Причем на форуме ардуино в сренде ардуино. Пишу на чем считаю нужным. И ты пиши на чем хош,  хоть на стене параши, но только и отзывы туда же.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

"Воще этот STM - х..ня, от железа и до софта" - твои слова? А теперь покажи мне, где на сайте STM написано про Arduino IDE. Вот официальный список софта (для STM8 и STM32), тут есть Arduino IDE? Ты чутка ошибся на кого гнать надо. Предъявляй свои претензии тем пейсателям, которые криво реализовали поддержку STM в Arduino IDE.

diger67
Offline
Зарегистрирован: 25.07.2015

Официальной поддержки Adrduino камням STM не осуществляет. И не чего ругаться. А для нормальной работы STM надо правильно инициализировать камень, иначе все будет работать криво. А использовать для этого надо не ниже CMSIS библиотеки.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Я немного продвинулся в изучении F030: портировал свою библиотеку для ST7735, сначала использовал SPL, потом переписал через регистры. Собираю себе набор дефайнов, уже написал для GPIO и для SPI, с ними инит удобнее, чем с SPL.

Ах да, еще пробовал играться с PLL: до 96МГц без проблем (при 48 официальных). Дальше не очень работает, дисплей не показывает даже при делителе частоты SPI в 256. Думаю, камень-то может работать, а с периферией уже рассинхрон прёт...

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Yarik.Yar Если ты любитель экстрима, говорят что в нем еще и флеша вдвое больше, чем в ДШ написано. Только это для себя, поиграться, разве что, официально только 32. Я не пробовал, не было нужды.

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Угу.

Официально в нём только 16, неофициально - 32, а еще читал на изиэлектроникс, что может быть USB, как в F072.

Руки не доходят потестить...

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

В своё время в Леонардо (Atmega32U4) был найден не описанный в его ДШ таймер (TIM2) ;) И он работает! Так что всё может быть.

 

diger67
Offline
Зарегистрирован: 25.07.2015

​Yarik.Yar, не думаю что и флеша в два раза больше, и USB присутствует. Практика показала что SPL одинакова для всей линейки контроллеров одной серии. Написать можно программу, а вот при дебаге или в реале работать не будет. Писал простенькую прогу Blink для 103rbt, затем залил в 103с8е6 и все работало. Для того что бы понять больше памяти или нет, берем пример прошивки под семейство большего чем 16 К и заливаем, все сразу станет ясно. Так же и с USB, из папки библиотека/примеры берем пример от 072 и зашиваем в 030. Если заработает, то значит действительно он присутствует.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

32 что есть - уже подтверждено. Не мной, но и я собираюсь.
USB буду сам пробовать.

diger67
Offline
Зарегистрирован: 25.07.2015

Походу умерла темка та. Жаль....

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Темка может и умерла, а контроллерами ещё занимаюсь, конкретно - нулевой серией. Почти со всей периферией уже поработал, собрал набор своих макросов, есть пара своих же библиотек.
Думаю так - израсходую весь свой запас AVR и полностью перейду на STM32F030xxxx)

ssss
Offline
Зарегистрирован: 01.07.2016

Давно уже пора было. А то так можно стать последним из АВР-могикан. ))))))))

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

Ну и мне было скучно и прикупил себе стм 32...., авр как то древне хотя и надежно и легко.

но стм быстрее, но вот тут вопрос!!

А кто авр или стм будет в ближайшем будущем?

АВР занял свои позиции, чего незнаю про стм.

 

Конечно надо осваивать все направления. Но маловато информации и сложновато получается.

diger67
Offline
Зарегистрирован: 25.07.2015

По началу сложнова то конечно. Но в целом не на много. Думаю имеют место быть и AVR и ARM. Для задачи типа помигать светодиодом. пощелкать релюшками, управлять символным или монохромным LCD более чем достаточно для AVR. А вот работать с TFT, особенно с большим разрешением уже многовато для AVR. Опять же в STM столько железных плюшек. Куча многофункциональных таймеров, шины управления памятью SRAM, SDRAM, внешней flash с шиной 16 bit, CAN, ADC, DAC, DMA от 7 потоков, 32 разрядная внутренняя шина, 16 бит порты. Перичислять можно долго. Из практи могу сказать, портировать библиотеки AVR на  STM также не составляет труда. Так что разработка программы для STM  может занять меньше времени чем кажется. Вот неплохие видео уроки посмотрев которые можно получить ответы на многие вопросы по STM  https://www.youtube.com/watch?v=Qqk81seMlHA

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Не пользую, но уже присматриваюсь что закупить. Правда больше к Атмеловскому АРМ .. в нем периферия покузявей и производительность повыше чутка (5 против 3.5 Core/Mhz) особенно для старших моделей STM32. Да и Микрочип явно эту линейку Атмела не выбросит на помойку .. своих-то приличных нету.

ssss
Offline
Зарегистрирован: 01.07.2016

Arhat109-2 пишет:

уже присматриваюсь что закупить. Правда больше к Атмеловскому АРМ ..

Ну-ну!

Вот вас гвоздями к атымэлу то прибило. )))))))))))))

strarbit
Offline
Зарегистрирован: 12.06.2016

Микрочип пригреб к себе Atmel. На официальном сайте Atmel красуется логотип микрочипа рядышком с логотипом Atmel. Для меня это был шок, когда узнала. Сortex тоже нравится. 

diger67
Offline
Зарегистрирован: 25.07.2015

Ну сейчас у Atmel выше быстродействие. У 4 линейки atmel тактовая 120 МГц, а у stm от 84 до 180, если забыть о USB можно настроив тактовую и шины разогнать до 240. И чего такого есть в atmel чего нет в stm. Э..... Есть у atmel FMC SDRAM, чего то я не припоминаю такого. Практически все 100 пиновые stm поддерживают шину управления паралльными 8/16 бит TFT, используя DMA вообще можно свести к минимуму нагрузку на ЦП при работе с TFT. Как бы это MicroChip не изгадил концепцию Atmel. как понаделают сраничной flash, понапихают дополнительных операторов в asm и пиши пропало. Будет ARM от MicroChip работать как ATmega 8 на кварце 4 МГц.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Судя по холиварам и обсуждениям во многих местах, Микрочип как раз и приобрел Атмел из-за этой линейки АРМ и сильно сомневаюсь, что он её похерит. А по производительности старшие модели Атмела делают СТМ "как стоячего" (тоже много холиваров и обсуждений), а по управлению периферией пока, читая даташиты (своего нет ни того ни иного) - вижу у Атмела традиционный "меговский" подход в отличии от "тут рыбу заворачивали, а тут аннушка масло пролила" от СТМ.

Ну и если честно, то доверия к СТМ у меня нет ни в одном глазу .. слишком витеевато прописано в даташитах многое - не сразу допирает "что тут это не так". В частности, уже обсуждали частоту МК и производительность. Как понимаю, врядли от STM32F103 можно получить производительность более 6 DMIPS "в принципе" .. даже x-меги дают больше (где-то видел 20). Лично меня - впечатлило и до сих пор не вижу аргументов от любителей говна, пардон СТМ, чтобы оно оказалось "не так" .. дутые цифирьки, сильно дутые. В отличии от Атмела.

В целом, мне больше интересно опробовать X-мегу, но пока не знаю, можно ли прикрутить к ней какой-нибудь CH340G чтобы программировать через USB с компьютера из под avrdude (так бы уже давно приобрел и поигрался). Вроде как avrdude поддерживает икс-меги начиная с версии 5.10 .. но, пока так и не понял можно ли как-то прикрутить одно к другому.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Архат, вы сравниваете муху со слоном. Серия 103 - практически первенец, а первый блин комом. Сравнивая старшие модели хмег с 103 серией, вы ничего не доказываете...

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Я ничего и не хочу доказывать. Просто высказал свое личное ИМХО почему лично у меня сформировалось предубеждение и недоверие к продукции СТМ "в целом" .. просто не желаю изучать варианты дерьма. Особенно когда есть выбор. Только и всего. во времена тутошнего холивара я очень надеялся что кто-то из любителей покажет мне - "недотепе" что это конфетка .. вышло как раз наоборот. Увы.

И это никоим образом не мешает вам использовать то, что вам больше нравится, знаете или дешевле. Что называется выберите 2 из трех. :)

diger67
Offline
Зарегистрирован: 25.07.2015

Xmega отрыжка atmel в пику stm8, не тупите Архат, при тактовой частоте в 32 МГц она только в режиме мигалки может тягаться с stm. А вы пробовали использовать stm? Думаю нет! А главный аргумент это цена при возможностях камня. Приведите мне хоть десяток сайтов по ARM atmel, думаю облом. А stm хоть отбавляй, что однозначно говорит в пльзу stm и колличеству используещих даный камень. К стати есть еще другие производители ARM. К тому же с stm можно работать обращаясь прямо к регистрам всей перефирии используя CMSIS, что оптимизирует работу программы. Вобщем пользуйте то что вам нравится и понятнее, особенно имея ввиду arduino, с кастрированным C++.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

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

Давайте попробую разгрести вашу кучку в знак примирения:

1. Xmega в пику или нет - мне лично пофигу. А как камень меня она прельщает своим ДМА и вменяемо-управляемой периферией. Жаль, что Атмел наступил на классические грабли убрав из этого камня возможность его простого программирования через USART .. это было сильной ошибкой. Только и всего. Ваш опус говорит только о том, что Вы конкретно с этим камнем не работали, впрочем как и многие тут и я тоже в том числе. Но, в отличии от Вас - похоже мне лучше удается чтение даташитов и он вызывает у меня стойкий интерес уже на протяжении года, а снижение его цены - провоцирует этот интерес ещё дальше. А знание того факта что на нем строят вполне промышленные системы и разработчики с вопросами по форумам НЕ НОСЯТСЯ .. только подливает масла в огонь любопытства. :)

2. Уже не однажды писал что не пробовал .. ваш вопрос - риторический. Аргумент - вполне себе аргумент при ряде обстоятельств .. это не мои обстоятельства в конкретном случае. Но, они имеют место быть по жизни и тот кто в них попадает - вполне вправе использовать то, что на рынке дешевле, даже в ущерб стоимости разработки (негры часто и вовсе бесплатны, особенно если это ты сам) и/или функциональности. Всё зависит от "внешних факторов". Также, выше уже было отписано: что УЖЕ И НЕ БУДУ пробовать в силу возникшего предубеждения. И ваши гимны - ситуацию не исправят ни разу (так, ежели вчё).

3. Количество ресурсов по обсуждению и количество задаваемых на них одних и тех же вопросов говорит только о проблемности работы с камнем. Хорошим камнем народ тупо пользуется и не задает дурацких вопросов, часто одних и тех же. Если вы посчитали это аргументом "в пользу", то для меня это как раз аргумент "против". Идеальный камень - тот, где разъяснений на сайте производителя ДОСТАТОЧНО для работы с ним и вопросы в Сети - не вознивают вовсе.

4. Да, у ардуино есть wiring, который есть "кастрированный С++" .. на самом деле в общем-то "чистый С/С++" с кривыми библиотеками .. но, Вас никто не заставляет ими пользоваться. Очень даже легко писать "с нуля" и на чистом языке .. порог вхождения близок к нулю для знающего язык и умеющего читать даташит на камень. Даже поверхностно читать. Не требуется в общем-то НИКАКИХ специальных средств. в отличии от СТМ. И Ардуино ИДЕ - по сути просто распиаренный "блокнот", не особо востребованный в разработке (свои последние изменения в библиотеке делал и вовсе в PHPStrom).

5. Да, в мире существует много производителей АРМ камней и ВСЕ ОНИ лучше чем СТМ. Это и есть причина по которой покупать конкретно СТМ уже не вижу никакого смысла для себя лично (напомню, у меня не стоит засада "дешевле").

ssss
Offline
Зарегистрирован: 01.07.2016

Arhat109-2 пишет:

1. Xmega в пику или нет - мне лично пофигу. А как камень меня она прельщает своим ДМА и вменяемо-управляемой периферией.

Никого не прельщает, только вас, товарищ прапорщик. ))))))))))

Цитата:

3. Количество ресурсов по обсуждению и количество задаваемых на них одних и тех же вопросов говорит только о проблемности работы с камнем. Хорошим камнем народ тупо пользуется и не задает дурацких вопросов, часто одних и тех же. Если вы посчитали это аргументом "в пользу", то для меня это как раз аргумент "против". Идеальный камень - тот, где разъяснений на сайте производителя ДОСТАТОЧНО для работы с ним и вопросы в Сети - не вознивают вовсе.

Судя по вашим аргументам, мега самая проблемная и говнячая. )))))))))))))

Цитата:

4. Да, у ардуино есть wiring, который есть "кастрированный С++" .. на самом деле в общем-то "чистый С/С++" с кривыми библиотеками .. но, Вас никто не заставляет ими пользоваться. Очень даже легко писать "с нуля" и на чистом языке .. порог вхождения близок к нулю для знающего язык и умеющего читать даташит на камень. Даже поверхностно читать. Не требуется в общем-то НИКАКИХ специальных средств. в отличии от СТМ.

Не сравнивайте кубики для дебилов и нормальный инструмент для разработок. О каких специальных средствах идёт речь, о мозгах? )))))))))))

Цитата:

5. Да, в мире существует много производителей АРМ камней и ВСЕ ОНИ лучше чем СТМ. Это и есть причина по которой покупать конкретно СТМ уже не вижу никакого смысла для себя лично (напомню, у меня не стоит засада "дешевле").

"ВСЕ ОНИ лучше чем СТМ" это как, просто ваша отсебятина? )))))))))))

В ларьке через дорогу 030-е чуть-чуть подешевели, радует! А вы и дальше можете захлёбываться своей рвотой и испражнениями.

diger67
Offline
Зарегистрирован: 25.07.2015

ssss ​, про дебилов вы конечно погорячились. Ну не может процентов 90 подростков лет 7 -10 глубоко знать языки програмирования высокого уровня, как стартовый вариант IDE arduino в самый раз.

Что касается пробовал или нет Xmega, пробовал но под мои задачи не подошел. Архат, если бы вы читали внимательно даташиты и статьи по ARM, то знали бы что все они, неважно кто их изготовил, имеют одну архитектуру. Этого требует лицензионное соглашение.