Нашел интересное сообщение на одном из форумов. http://forum.easyelectronics.ru/viewtop … d4#p411382
Т. е. теоретически в STM32F103C8T6 128 КБ Falsh памяти, а не 64 КБ как заявлено.

Изучаем ARMы
Сообщений 31 страница 60 из 185
Поделиться312016-04-02 13:04:45
Поделиться322016-04-02 14:27:48
Проверил сколько реально в STM32F103C8T6 Flash памяти и в нем действительно 128 КБ.
Для этого несколько раз создавал bin файл, заполненный случайными числами, заливал его в МК, потом считывал и сравнивал. Всегда совпадало.
Теперь о том как прочитать или залить в МК больше 64 КБ, если программатор определяется что в нем только 64 КБ памяти.

Все просто. На следующей странице, где показаны права доступа к памяти есть выпадающий список.
Открываем его и видим.

Выбираем 128 и теперь доступна вся память.
Остается вопрос, почему разработчики так поступили? Возможно STM32F103C8T6 это STM32F103CBT6, но с отбракованой партии, в которой в проверяемых экземплярах нашли дефекты памяти в адресном пространстве от 64 до 128 КБ. При этом бракуют всю партию, но это не значит что дефекты во всех МК и если проверка памяти прошла удачно, то можно использовать ее всю.
Поделиться332016-04-02 20:12:46
Из бейсиков для ARM есть mikroBasic, но он "жадный"... Лекарства для него не нашел.
Могу успокоить, микробэйсик - это вовсе не бейсик, а жалкое его подобие, в конечном итоге он по архитектуре похоже на тот же Си, только с операторами от бэйсика и корявой структурой. В общем жалеть не о чем, кроме как о Баскоме...
Поделиться342016-04-02 21:09:45
С версией 3 точно работал.
Проверил с версией 3.0.0. Не работает. Пишет Demo Limit...
Поделиться352016-04-04 10:32:56
Остается вопрос, почему разработчики так поступили?
Может потому что в stm32 нет EEPROM, а в место него используется FLASH память? Типа для прошивки 64 кб и для программных нужд еще 64?
Отредактировано Tsoyvi (2016-04-04 10:33:53)
Поделиться362016-04-04 10:58:23
В даташите ничего не написано что память с адресами от 64 до 128 используется в качестве EEPROM.
В STM32 есть EEPROM (например в STM32Lxxxx), но не во всех моделях.
Поделиться372016-04-08 22:41:15
Вроде как их можно шить прямо по встроенному USB. Вот первое, что попалось Ссылка.
Поделиться382016-04-10 01:07:04
Была у меня мысль что эта плата - хороший вариант для автономной (без компа) цветомузыки.
Немного поэкспериментировал в этом направлении. Сейчас сделан сбор семплов по таймеру 40 тысяч раз в секунду. Чтобы не нагружать процессор обработкой такого количества прерываний, настроен DMA на заполнение буфера (массив содержащий 4 тысячи двухбайтных ячеек). В итоге получаем вместо 40 прерываний в секунду, всего 10 прерываний в секунду. Остается скопировать данные и выполнить БПФ.
Поделиться392016-04-10 06:59:34
Немного поэкспериментировал в этом направлении.
Хорошая новость!
Поделиться402016-07-20 14:44:34
Немного поработав с STM32 скажу так - МК хорошие, не стоит от них отказываться.
Одни из самых дешевых и простых МК STM32F030F4P6 (сейчас стоят 40 центов за штуку) во много раз превосходят по возможностям тиньки, меги и т. д.
Да приходится программировать на Си, но не все так сложно как кажется. Нет необходимости непосредственно взаимодействовать с регистрами. Компания ST предоставляет библиотеки SPL и HAL, которые позволять конфигурировать модули МК почти не заглядывая в даташит, т. е. как в баскоме.
Это значительно облегчает разработку и позволяет разрабатывать программы без глубокого изучения устройства МК. 
Поделиться412016-07-20 14:54:07
я пробовал учить Си раз 30, еще со школьных времён...
Асм для x86 - сносно, Паскали/Бейскики - вполне приятно, асм для PIC - термимо, асм для AVR tiny/mega - приятно (после PIC
, FoxPrо (когда еще был DBaseIV) - очень приятно для БД...
но СИ - это слезы... я недавно несколько дней над чуим кодом для Ардуинки сидел. Чуть не поседел. Плакал, много чаю выпил, спал мало... понял, почему сейчас для мигания св.диодом надо минимум 8 кБ флеша, килобайт стека и >16 МГц скорости - всё сжирают библиотеки... это кашмар... до сих пон не могу вкурить логику создателей этих Си-подобных систем
осталось понять, что есть "SPL и HAL". Это как Маркс и Энгельс? 
Поделиться422016-07-20 15:17:20
я недавно несколько дней над чужим кодом для Ардуинки сидел
Видел тот код. Там не Си, а C++ (чтобы не путать, расширение у Си файлов *.c, а у C++ файлов - *.cpp).
Сам по себе код не очень сложный и содержит статический класс.
Язык Си проще. В нем нет многих конструкций имеющихся в C++.
Вообще есть идея переписать библиотеку SPL под mikroBasic и тогда на нем можно будет что-то писать под STM (то что сейчас, никуда не годится), но одному это за год не сделать...
всё сжирают библиотеки
Библиотеки бывают разные. Например в FastAVR они тоже есть, но прошивка получается довольно компактная.
осталось понять, что есть "SPL и HAL".
Это библиотеки функций для STM32. Например совсем недавно выложил пример ШИМ с использованием библиотеки SPL.
Допустим вот конфигурирование порта
GPIO_InitTypeDef s;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); // Включаем тактирование порта PB.
s.GPIO_Pin = GPIO_Pin_1; // Настройка вывода PB1.
s.GPIO_Mode = GPIO_Mode_AF; // Вывод настроен на одну из альтернативных функций.
s.GPIO_OType = GPIO_OType_PP; // Двухтактный выход (т. е. не открытый сток).
s.GPIO_PuPd = GPIO_PuPd_NOPULL; // Подтягивающие резисторы отключены.
s.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &s); // Инициализация порта.
GPIO_PinAFConfig(GPIOB, GPIO_PinSource1, GPIO_AF_0); // PB1 это выход таймера TIM 14.Если не использовать библиотеки, а работать непосредственно с регистрами то код будет примерно таким (тут правда вывод настраивается для USART, но это не важно).
RCC->AHB1ENR=0x0000000f; //vkl port A-D
GPIOA->MODER=0xA80000A0; //pin2,3=AF (usart2)
GPIOD->MODER=0x55000000; //4 led
GPIOA->AFR[1]=0x00000700; //pin2,3=usart2
GPIOA->OSPEEDR=0x00000050; //25MHzКакой код более понятный? Можно ли понять второй код не заглядывая в даташит?
Поделиться442016-07-20 19:35:58
Баскома для ARM нет. Марк уже 8 лет пишет что BASCOM-ARM в разработке, но неизвестно так ли это и если так, то на каком этапе разработка.
Из бейсиков для ARM есть mikroBasic, но он "жадный"... Лекарства для него не нашел.
Вот и приходится писать на Си.
Здравствуйте!
Настройки камня отдельно, а прога в микровасике просто "Приуэйт Мир"
program LedBlinking
main:
'GPIO_Digital_Output(@GPIOA_BASE, _GPIO_PINMASK_ALL) ' Set PORTA as digital output
GPIO_Digital_Output(@GPIOA_BASE, _GPIO_PINMASK_LOW) ' Set PORTA.0-7 as digital output
'GPIO_Digital_Output(@GPIOB_BASE, _GPIO_PINMASK_ALL) ' Set PORTB as digital output
'GPIO_Digital_Output(@GPIOC_BASE, _GPIO_PINMASK_ALL) ' Set PORTC as digital output
'GPIO_Digital_Output(@GPIOD_BASE, _GPIO_PINMASK_ALL) ' Set PORTD as digital output
'GPIO_Digital_Output(@GPIOE_BASE, _GPIO_PINMASK_ALL) ' Set PORTE as digital output
GPIOA_ODR = 0
'GPIOB_ODR = 0
'GPIOC_ODR = 0
'GPIOD_ODR = 0
'GPIOE_ODR = 0
while TRUE
GPIOA_ODR = not GPIOA_ODR ' Toggle PORTA
'GPIOB_ODR = not GPIOB_ODR ' Toggle PORTB
'GPIOC_ODR = not GPIOC_ODR ' Toggle PORTC
'GPIOD_ODR = not GPIOD_ODR ' Toggle PORTD
'GPIOE_ODR = not GPIOE_ODR ' Toggle PORTE
Delay_ms(100)
wend
end.
Поделиться452016-07-20 23:58:53
еще года 4 назад приятель Марка мне писал, что плавно перетекают в другой компилятор, БАСком будет "не в теме", так как его постоянно ломают и пользуются бесплатно.
Делают очередной аля-ПикСтик (интерпретатор в самом камне). Мол, МК ныне жирные, будет продавать уже МК с прошитыми загрузчиком + интерпретатор. Как МегаБейсик - там такая же идеология...
так что Баском ARM ясно пролетает
Да и Марк перестал отвечать почти 2 года назад... Страны СНГ не смотрятся покупателями: народ бедный (с точки зрения Европы), постоянно что-то просящий и при этом ворующий...
Поделиться462016-07-21 00:41:55
Вообще есть идея переписать библиотеку SPL под mikroBasic
Проверил эту теорию на практике и оказалось что она имеет право на существование. Код на Си.
int main(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); // Включаем тактирование порта PB.
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1; // Настройка вывода PB.1.
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; // Вывод работает как выход.
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; // Двухтактный выход (т. е. не открытый сток).
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; // Подтягивающие резисторы отключены.
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, GPIO_InitStruct); // Инициализация порта.
while(1)
{
GPIO_SetBits(GPIOB, GPIO_Pin_1); // Лог. 1 на выходе PB.1.
SysTim_DelayMS(500); // Ждем 500 миллисекунд.
GPIO_ResetBits(GPIOB, GPIO_Pin_1); // Лог. 0 на выходе PB.1.
SysTim_DelayMS(500); // Ждем 500 миллисекунд.
}
}Аналогичный код на mikroBasic.
dim GPIO_InitStruct as GPIO_InitTypeDef
main:
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE) ' Включаем тактирование порта PB.
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1 ' Настройка вывода PB.1.
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT ' Вывод работает как выход.
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP ' Двухтактный выход (т. е. не открытый сток).
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL ' Подтягивающие резисторы отключены.
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz
GPIO_Init(GPIOB, GPIO_InitStruct) ' Инициализация порта.
while TRUE
GPIO_SetBits(GPIOB, GPIO_Pin_1)
Delay_ms(500)
GPIO_ResetBits(GPIOB, GPIO_Pin_1)
Delay_ms(500)
wend
end.Отличий мало, но для этого пришлось перевести на mikroBasic часть библиотеки SPL.
Код:program GPIO_SPL_Lite structure GPIO_TypeDef dim MODER as longword ' GPIO port mode register, Address offset: 0x00 */ dim OTYPER as word ' GPIO port output type register, Address offset: 0x04 */ dim RESERVED0 as word ' Reserved, 0x06 */ dim OSPEEDR as longword ' GPIO port output speed register, Address offset: 0x08 */ dim PUPDR as longword ' GPIO port pull-up/pull-down register, Address offset: 0x0C */ dim IDR as word ' GPIO port input data register, Address offset: 0x10 */ dim RESERVED1 as word ' Reserved, 0x12 */ dim ODR as word ' GPIO port output data register, Address offset: 0x14 */ dim RESERVED2 as word ' Reserved, 0x16 */ dim BSRR as longword ' GPIO port bit set/reset registerBSRR, Address offset: 0x18 */ dim LCKR as longword ' GPIO port configuration lock register, Address offset: 0x1C */ dim AFR as longword[2] ' GPIO alternate function low register, Address offset: 0x20-0x24 */ dim BRR as word ' GPIO bit reset register, Address offset: 0x28 */ dim RESERVED3 as word end structure const GPIO_Mode_IN = 0x00 '/*!< GPIO Input Mode */ const GPIO_Mode_OUT = 0x01 '/*!< GPIO Output Mode */ const GPIO_Mode_AF = 0x02 '/*!< GPIO Alternate function Mode */ const GPIO_Mode_AN = 0x03 ' /*!< GPIO Analog In/Out Mode */ const GPIO_OType_PP = 0x00 const GPIO_OType_OD = 0x01 const GPIO_Speed_Level_1 = 0x00 '/*!< I/O output speed: Low 2 MHz */ const GPIO_Speed_Level_2 = 0x01 '/*!< I/O output speed: Medium 10 MHz */ const GPIO_Speed_Level_3 = 0x03 '/*!< I/O output speed: High 50 MHz */ const GPIO_PuPd_NOPULL = 0x00 const GPIO_PuPd_UP = 0x01 const GPIO_PuPd_DOWN = 0x02 '/****************** Bit definition for RCC_AHBENR register ******************/ const RCC_AHBENR_DMAEN = (0x00000001) ' /*!< DMA clock enable */ const RCC_AHBENR_SRAMEN = (0x00000004) ' /*!< SRAM interface clock enable */ const RCC_AHBENR_FLITFEN = (0x00000010) ' /*!< FLITF clock enable */ const RCC_AHBENR_CRCEN = (0x00000040) ' /*!< CRC clock enable */ const RCC_AHBENR_GPIOAEN = (0x00020000) ' /*!< GPIOA clock enable */ const RCC_AHBENR_GPIOBEN = (0x00040000) ' /*!< GPIOB clock enable */ const RCC_AHBENR_GPIOCEN = (0x00080000) ' /*!< GPIOC clock enable */ const RCC_AHBENR_GPIODEN = (0x00100000) ' /*!< GPIOD clock enable */ const RCC_AHBENR_GPIOEEN = (0x00200000) ' /*!< GPIOE clock enable */ const RCC_AHBENR_GPIOFEN = (0x00400000) ' /*!< GPIOF clock enable */ const RCC_AHBENR_TSCEN = (0x01000000) ' /*!< TS controller clock enable */ const RCC_AHBENR_DMA1EN = RCC_AHBENR_DMAEN '*!< DMA1 clock enable */ const RCC_AHBENR_TSEN = RCC_AHBENR_TSCEN const RCC_AHBPeriph_GPIOA = RCC_AHBENR_GPIOAEN const RCC_AHBPeriph_GPIOB = RCC_AHBENR_GPIOBEN const RCC_AHBPeriph_GPIOC = RCC_AHBENR_GPIOCEN const RCC_AHBPeriph_GPIOD = RCC_AHBENR_GPIODEN const RCC_AHBPeriph_GPIOE = RCC_AHBENR_GPIOEEN '/*!< Only applicable for STM32F072 devices */ const RCC_AHBPeriph_GPIOF = RCC_AHBENR_GPIOFEN const RCC_AHBPeriph_TS = RCC_AHBENR_TSEN const RCC_AHBPeriph_CRC = RCC_AHBENR_CRCEN const RCC_AHBPeriph_FLITF = RCC_AHBENR_FLITFEN const RCC_AHBPeriph_SRAM = RCC_AHBENR_SRAMEN const RCC_AHBPeriph_DMA1 = RCC_AHBENR_DMA1EN const DISABLE = 0 const ENABLE = 1 const RESET = 0 const SET_Bit = 1 const GPIO_OSPEEDER_OSPEEDR0 = 3 const GPIO_OTYPER_OT_0 = 1 const GPIO_MODER_MODER0 = 3 const GPIO_PUPDR_PUPDR0 = 3 const GPIO_Pin_0 = 0x0001 ' /*!< Pin 0 selected */ const GPIO_Pin_1 = 0x0002 ' /*!< Pin 1 selected */ const GPIO_Pin_2 = 0x0004 ' /*!< Pin 2 selected */ const GPIO_Pin_3 = 0x0008 ' /*!< Pin 3 selected */ const GPIO_Pin_4 = 0x0010 ' /*!< Pin 4 selected */ const GPIO_Pin_5 = 0x0020 ' /*!< Pin 5 selected */ const GPIO_Pin_6 = 0x0040 ' /*!< Pin 6 selected */ const GPIO_Pin_7 = 0x0080 ' /*!< Pin 7 selected */ const GPIO_Pin_8 = 0x0100 ' /*!< Pin 8 selected */ const GPIO_Pin_9 = 0x0200 ' /*!< Pin 9 selected */ const GPIO_Pin_10 = 0x0400 ' /*!< Pin 10 selected */ const GPIO_Pin_11 = 0x0800 ' /*!< Pin 11 selected */ const GPIO_Pin_12 = 0x1000 ' /*!< Pin 12 selected */ const GPIO_Pin_13 = 0x2000 ' /*!< Pin 13 selected */ const GPIO_Pin_14 = 0x4000 ' /*!< Pin 14 selected */ const GPIO_Pin_15 = 0x8000 ' /*!< Pin 15 selected */ const GPIO_Pin_All= 0xFFFF ' /*!< All pins selected */ const GPIO_Speed_2MHz = GPIO_Speed_Level_1 ' /*!< I/O output speed: Low 2 MHz */ const GPIO_Speed_10MHz = GPIO_Speed_Level_2 ' /*!< I/O output speed: Medium 10 MHz */ const GPIO_Speed_50MHz = GPIO_Speed_Level_3 ' /*!< I/O output speed: High 50 MHz */ structure GPIO_InitTypeDef dim GPIO_Pin as longword '/*!< Specifies the GPIO pins to be configured. ' This parameter can be any value of @ref GPIO_pins_define */ dim GPIO_Mode as longword ' /*!< Specifies the operating mode for the selected pins. ' This parameter can be a value of @ref GPIOMode_TypeDef */ dim GPIO_Speed as longword ' /*!< Specifies the speed for the selected pins. ' This parameter can be a value of @ref GPIOSpeed_TypeDef */ dim GPIO_OType as longword ' /*!< Specifies the operating output type for the selected pins. ' This parameter can be a value of @ref GPIOOType_TypeDef */ dim GPIO_PuPd as longword end structure structure RCC_TypeDef dim CR as longword '/*!< RCC clock control register, Address offset: 0x00 */ dim CFGR as longword '/*!< RCC clock configuration register, Address offset: 0x04 */ dim CIR as longword '/*!< RCC clock interrupt register, Address offset: 0x08 */ dim APB2RSTR as longword '/*!< RCC APB2 peripheral reset register, Address offset: 0x0C */ dim APB1RSTR as longword '/*!< RCC APB1 peripheral reset register, Address offset: 0x10 */ dim AHBENR as longword '/*!< RCC AHB peripheral clock register, Address offset: 0x14 */ dim APB2ENR as longword '/*!< RCC APB2 peripheral clock enable register, Address offset: 0x18 */ dim APB1ENR as longword '/*!< RCC APB1 peripheral clock enable register, Address offset: 0x1C */ dim BDCR as longword '/*!< RCC Backup domain control register, Address offset: 0x20 */ dim CSR as longword '/*!< RCC clock control & status register, Address offset: 0x24 */ dim AHBRSTR as longword '/*!< RCC AHB peripheral reset register, Address offset: 0x28 */ dim CFGR2 as longword '/*!< RCC clock configuration register 2, Address offset: 0x2C */ dim CFGR3 as longword '/*!< RCC clock configuration register 3, Address offset: 0x30 */ dim CR2 as longword '/*!< RCC clock control register 2, Address offset: 0x34 */ end structure dim GPIOA as GPIO_TypeDef absolute 0x48000000 volatile sfr far dim GPIOB as GPIO_TypeDef absolute 0x48000400 volatile sfr far dim RCC as RCC_TypeDef absolute 0x40021000 volatile sfr far sub procedure RCC_AHBPeriphClockCmd(dim RCC_AHBPeriph as longword, dim NewState as byte) if NewState <> DISABLE Then RCC.AHBENR = RCC.AHBENR or RCC_AHBPeriph else RCC.AHBENR = RCC.AHBENR and (not RCC_AHBPeriph) end if end sub sub procedure GPIO_Init(dim byref GPIOx as GPIO_TypeDef, dim byref GPIO_InitStruct as GPIO_InitTypeDef) dim pinpos, pos , currentpin as longword for pinpos = 0 to 10 pos = 0x01 << pinpos currentpin = GPIO_InitStruct.GPIO_Pin and pos if currentpin = pos then if (GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT) OR (GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF) Then '/* Speed mode configuration */ GPIOx.OSPEEDR = GPIOx.OSPEEDR and ( not (GPIO_OSPEEDER_OSPEEDR0 << (pinpos * 2))) GPIOx.OSPEEDR = GPIOx.OSPEEDR or (GPIO_InitStruct.GPIO_Speed << (pinpos * 2)) ' /* Output mode configuration */ GPIOx.OTYPER = GPIOx.OTYPER and ( not (GPIO_OTYPER_OT_0 << pinpos)) GPIOx.OTYPER = GPIOx.OTYPER or (GPIO_InitStruct.GPIO_OType << pinpos) end if GPIOx.MODER = GPIOx.MODER and ( not (GPIO_MODER_MODER0 << (pinpos * 2))) GPIOx.MODER = GPIOx.MODER or (GPIO_InitStruct.GPIO_Mode << (pinpos * 2)) '/* Pull-up Pull down resistor configuration */ GPIOx.PUPDR = GPIOx.PUPDR and ( not (GPIO_PUPDR_PUPDR0 << (pinpos * 2))) GPIOx.PUPDR = GPIOx.PUPDR or (GPIO_InitStruct.GPIO_PuPd << (pinpos * 2)) end if next pinpos end sub sub procedure GPIO_SetBits(dim byref GPIOx as GPIO_TypeDef, dim GPIO_Pin as word) GPIOx.BSRR = GPIO_Pin end sub sub procedure GPIO_ResetBits(dim byref GPIOx as GPIO_TypeDef, dim GPIO_Pin as word) GPIOx.BRR = GPIO_Pin end sub dim GPIO_InitStruct as GPIO_InitTypeDef main: RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE) ' Включаем тактирование порта PB. GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1 ' Настройка вывода PB.1. GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT ' Вывод работает как выход. GPIO_InitStruct.GPIO_OType = GPIO_OType_PP ' Двухтактный выход (т. е. не открытый сток). GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL ' Подтягивающие резисторы отключены. GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz GPIO_Init(GPIOB, GPIO_InitStruct) ' Инициализация порта. while TRUE GPIO_SetBits(GPIOB, GPIO_Pin_1) Delay_ms(500) GPIO_ResetBits(GPIOB, GPIO_Pin_1) Delay_ms(500) wend end.
Код рабочий - светодиод мигает (размер прошивки 1168 байт). Файлы. http://pure-basic.narod.ru/forum_files/ … L_Lite.zip
Поделиться472016-07-21 06:43:50
светодиод мигает = размер прошивки 1168 байт
афигеть...
Поделиться482016-07-21 11:16:00
Делают очередной аля-ПикСтик (интерпретатор в самом камне). Мол, МК ныне жирные, будет продавать уже МК с прошитыми загрузчиком + интерпретатор. Как МегаБейсик - там такая же идеология...
так что Баском ARM ясно пролетает
Вообще уже не первый год на этой штуке все АРМы работают (уже и не только), называется технология mbed, у меня есть такая игрушка, да очень удобная, но одна из главных проблем, которая возникает - это:
1. защита контента, её там просто нет, можно легко прошивку скопировать и залить в другой камень;
2. одна железка - один продукт, т.е. если нам нужно сделать таких устройств много нужно покупать целиком железку с предпрошитом загрузчиком;
3. на и в АВР явно будет проблема с ресурсами, там их и так не много (понятно, что у АРМов особо проблем с этим нет).
Да и Марк перестал отвечать почти 2 года назад... Страны СНГ не смотрятся покупателями: народ бедный (с точки зрения Европы), постоянно что-то просящий и при этом ворующий...
Это так - да, но Марк, когда задумывал (видимо) свой проект, не думал ничего о безопасности и в те времена, уровень был в районе DOSа.) Изначально не заложил современные системы защиты. Впрочем во всем мире это главная проблема и так, очень много денег вкладывается в защиту и её постоянно ломают, достаточно посмотреть на виндоусы, игрушки и даже игровые консоли...
В общем очень жаль будет, когда Баском умрёт. 
Поделиться492016-07-21 11:21:50
афигеть...
Это не говорит об неэффективности компиляторов. МК 32 битные и всё (регистры, озу, flash и т. д.) находится в одном адресном пространстве размером 4 ГБ, т. е. адресация 4-ёх байтная.
Вектора прерываний тоже 4-ёх байтные. В STM32F030F4P6 их 49. 49*4=196. Почти 200 байт используется только на таблицу прерываний.
Инициализация STM32 сложнее чем у AVR что требует больше кода. Все это сказывается на размере прошивки.
Поделиться502016-07-21 11:28:20
Пётр, я понимаю логикой, но эмоции (в сравнении с 8-битками) - так и приёт )))
Поделиться512016-07-21 16:48:49
Так и памяти под прошивку тоже больше. Например в STM32F030F4P6 16 КБ (доступно 32 КБ). В STM32F103CBT6 128 КБ. Есть МК еще большим объемом, до нескольких мегабайт.
Поделиться522016-09-03 11:59:00
В STM32 часто встречается недокументированная память и периферия.
Выше уже писал что в STM32F103C8T6 128 КБ flash а не 64 как написано в документации. Выяснилось следующее. Выпускаются кристаллы с размером Flash 32 КБ, 128 КБ, 512 КБ, 1 МБ и т. д. Т. е. если заявлено что в МК 16 КБ, на самом деле в нем 32 КБ, а если заявлено что 256 КБ, то в МК 512 КБ flash.
Вообще кристаллов намного меньше чем моделей МК и например в STM32F101CBT6 есть недокументированный модуль USB (чем пользуются китайцы ставя МК с отладчик ST-LINK), т. к. на самом деле кристалл от STM32F103CBT6.
В STM32F030F4P6 не 16 КБ, а 32 КБ flash и имеются недокументированный таймер Tim2 (32-ух битный реверсивный счетчик
с 16-ти битным предделителем и с четырьмя 32-ух битными каналами захвата/сравнения/ШИМ) и предположительно (не проверял) модуль I2S (не путать с I2C). Т. е. в МК кристалл от STM32F031F6P6.
Поделиться532016-09-03 16:00:48
Удивил, не знал.
Это маркетинг такой у ST? Типа клепаем всё одинаковое, а на выходе только маркировку ставим разную или там может реально при тестах на заводе выясняется, что часть памяти или ещё что, не отвечают требованиям (т.к. сказать брак производства и направление в нужную ветку/марку МК)?
Поделиться542016-09-03 16:25:40
Может отбраковка, а может они не тестируют часть памяти/периферии. Ведь на тестирование нужно время и чем меньше модулей/памяти тестируется тем быстрее оно проходит, а поскольку они выпускают МК в огромных количествах, то время тестирования имеет существенное значение. Получается что чем меньше тестирование занимает времени, тем больше МК могут выпустить и тем дешевле они стоят.
Поделиться552016-09-04 22:05:36
Решил сравнить AVR и STM32.
Для сравнения взял одни из самых простых моделей. AVR это ATtiny2313, а STM32 - STM32F030F4P6.
Среди AVR есть МК еще по проще, но выбрал именно ATtiny2313 по количеству выводов, которое такое же как в STM32F030F4P6.
Итак сравнение.
Параметр | ATtiny2313 | ATxbanned6A4 | STM32F030F4P6 | STM32F103C8T6 |
Цена на Али партии из 10 штук | ||||
Разрядность, бит | 8 | 8 | 32 | 32 |
Ядро | AVR Tiny | AVR XMEGA | ARM Cortex-M0 | ARM Cortex-M3 |
Объем Flash/Ram/EEPROM, байт | 2048 / 128 / 128 | 16384 / 2048 / 1024 | 16384 (32768) / 4096 / 0 | 65536 (131072) / 20480 / 0 |
Количество выводов/тип корпуса | 20 / PDIP/SOIC/MLF | 48 / TQFP48 | 20 / TSSOP20 | 48 / LQFP48 |
Количество линий ввода/вывода | 18 | 34 | 15 | 37 |
Отладка | PDI | |||
Стоимость отладчика | ||||
Напряжение питания | 5.0В | 3.3В | 3.3В | 3.3В |
Максимальная частота / разгон | 20МГц / неизвестно | 32МГц / неизвестно | 48МГц / 96МГц | 72МГц / 136 МГц |
Bootloader прошитый при производстве | Нет | неизвестно | Есть (USART) | Есть (USART) |
Число таймеров | 3 | 5 | 5 + 1 | 4 |
Число каналов захвата/сравнения/ШИМ | 4 | 6 | 11 + 4 | 16 |
Системный таймер | Нет | Нет | Есть | Есть |
Часы реального времени (RTC) | Нет | Есть | Есть | Есть |
Сторожевой таймер | IWDG | IWDG | IWDG и WWDG | IWDG и WWDG |
Число каналов АЦП / разрядность | АЦП отсутствует | 10 + 2 каналов / 12 бит | 10 каналов / 12 бит | 2 * 10 каналов / 12 бит |
Число выборок в секунду АЦП | АЦП отсутствует | 2000000 (2 миллиона) | 1000000 (миллион) | 1000000 (миллион) |
Встроенный датчик температуры | Нет | Есть | Есть | Есть |
Число модулей USART/I2C/SPI | 1(UART)/1(USI)/1 | 5/2/2 | 1/1/1 | 3/2/2 |
Другие модули | AES / DES / DAC | CAN, USB | ||
DMA | Нет | Есть | Есть | Есть |
Встроенный компаратор | Есть | Есть | Нет | Нет |
Динамическое изменение частоты | Нет | Есть | Есть | Есть |
Модуль CRC | Нет | Нет | Есть | Есть |
Постраничная защита Flash | Нет | Неизвестно | Есть | Есть |
Поддержка приоритетов прерываний | Нет | Есть | Есть | Есть |
Поддержка МК в баскоме | Есть | Есть | Нет | Нет |
Поделиться562016-09-04 23:50:24
а к чему это сравнение? МК разработаны в разных веках, даже тысячелетиях.... 
для меня главное: среда разработки, наличие средств отладки (хотя бы программатор), описания (побольше, хотелось бы еще и на русском), наличие примеров использования, желательно 5-вольтовые входы/выходы.
А когда: среда другая (язык Си не вкурю до сих пор), наработки на англицском и куцо, описания по 3-5 документам разбросаны, да и выходы - 3вольта, то кайфа нет вообще...
Да и цена самого МК при цене разработки от $50 не важна, это важно когда партия хотя бы в 1000 изделий.
Отредактировано Александр Д. (2016-09-04 23:51:51)
Поделиться572016-09-05 09:56:29
100 раз говорил, сравнивать надо с ближайшем родственником - это XMega - это по аппаратной части и правильно всё сказал Александр Д. Развития направления AVR у Атмела давно не имеет той мощности как раньше, они сами давно пытаются продвигать свои ARM-ы, но судя по отзывам в инете - они никого не интересуют (как раз из-за STM). Кстати говоря, XMega возможно ещё даст прикурить по аппаратному насыщению и простоте использования. 
Ещё, коль начала сравнивать, где главное в таблице? Где значения потребления в разных режимах работы (хотя бы: рабочий режим и полный сон)?
Поделиться582016-09-05 10:20:06
Хмега хорошо, но дороги. Да и задач У МЕНЯ под них нет
Потребление важно там, где оно важно: питание устройства от аккумулятора, солнечных батарей, необслуживаемая техника....
а так проще не ставить лишний св.диод или изменить режимы работы другой периферии, даже те же pull-up резисторы поставить с большим сопротивлением...
Ну, и понизить тактовую МК до нужной.
Поделиться592016-09-05 10:52:12
Я всё писал автору сравнительной таблице.
ATtiny2313 - самый убогий и дешевый МК в линейке Атмела, держится только на 2К ОЗУ. Хоть бы ATtiny84 брали, там АЦП есть.) ИМХО
Поделиться602016-09-05 11:01:17
для меня главное: среда разработки
Для STM32 сред разработки (в т. ч. бесплатных) довольно много. Правда большинство из них для С/C++. Есть MikroBasic. Компилятор нормальный, но его библиотека функций оставляет желать лучшего. В большинстве случаев придется непосредственно работать с регистрами...
наличие средств отладки (хотя бы программатор)
Для STM32 с этим тоже проблем нет. Программатор/отладчик стоит 130 с копейками и позволяет не только прошивать, но и отлаживать программу в МК.
Если нужна только прошивка, то программатор не требуется. Достаточно COM порта, т. к. с завода в МК зашит USART загрузчик.
наличие примеров использования
Примеров хватает. Как в сети, так и в папке с библиотеками, где есть по несколько примеров использования каждого модуля периферии.
описания по 3-5 документам разбросаны
Лучше один документ содержащий 10 тысяч страниц?
желательно 5-вольтовые входы/выходы
Некоторые из входов толерантны к 5 вольт. В даташите написано какие.
Да и цена самого МК при цене разработки от $50 не важна, это важно когда партия хотя бы в 1000 изделий.
Я присмотрелся к STM32 не только из-за цены. Было несколько задач, которые на меге сделать было сложно, из-за малого функционала периферии. Фирма Atmel похоже тоже это осознала и выпустила XMega, в которой периферия заметно функциональнее.
Задачи в общем-то были не сложные. Необходимо было оцифровывать сигнал с частотой 100 КГц. И если на меге это еще можно было попытаться сделать уменьшив разрядность АЦП, но это создавало другую проблему - 100 тысяч прерываний в секунду для меги слишком много! Нужен модуль DMA, которого в ней нет...
Другая задача состояла в том чтобы не пропустить короткий импульс на INT во время выполнения другого прерывания, т. е. нужна поддержка прерывания внутри прерывания. Другими словами, нужна поддержка приоритетов прерываний.
100 раз говорил, сравнивать надо с ближайшем родственником - это XMega
Тогда уж сравнивать с AVR32...
Кстати говоря, XMega возможно ещё даст прикурить по аппаратному насыщению и простоте использования.
Для этого она должна продаваться на каждом углу (как сейчас меги) и для нее должен быть недорогой программатор/отладчик.
Ещё, коль начала сравнивать, где главное в таблице? Где значения потребления в разных режимах работы (хотя бы: рабочий режим и полный сон)?
Проверить сколько ест ATtiny2313 не могу из-за его отсутствия.
Потребление STM32 Разгон микроконтроллера
Оно сильно зависит от количества активной периферии.
В даташите есть таблицы.
ATtiny2313 - самый убогий и дешевый МК в линейке Атмела
Есть еще ATtiny13.
Я сравнивал самые примитивные МК.
STM32F030F4P6 это самый простой и дешевый среди STM32 так что все честно.
Хоть бы ATtiny84 брали, там АЦП есть.) ИМХО
Тогда можно было бы взять для сравнения с ним скажем STM32F070, у которого USB есть. 


