Микроконтроллеры

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Микроконтроллеры » vt » STC15 и STC8


STC15 и STC8

Сообщений 1 страница 30 из 38

1

Китайские мк с ядром 8052

Тут мы с dosikus-ом разбирались с серией STC15F(L)10x - http://forum.easyelectronics.ru/viewtop … mp;t=25932
Тут я разбирался и пиарил STC15W20x ) - http://forum.easyelectronics.ru/viewtop … mp;t=27306

Дублировать всё оттуда сюда лениво да и как-то нехорошо, а если коротко, то вот основные плюшки STC15W20x:

* 35 МГц, 1-5 тактов на команду, т.е. в реальности видимо где-то 10-20 мипс
* внутренний генератор с точностью +-0.3% и стабильностью +-1% от -40 до +85 град
* питание 2.4-5.5 В
* dip и soic, 8 и 16 ног, 20 мА на ногу, но всего до 90 мА
* 1-4 К флэша и соотв. 4-1 К "eeprom" (в кавычках потому что по сути это тот же флэш)
* всё программирование, в смысле прошивка и конфиг, только через uart

Сайт - http://www.stcmcu.com/
Даташит по всем STC15 - http://www.stcmcu.com/datasheet/stc/STC … nglish.pdf

Продолжение будет только здесь, ну, по крайней мере, от меня )

2

Появились новые платки на stc15w204s - https://ru.aliexpress.com/store/product … 75868.html
http://s7.uploads.ru/aXKlk.png
А может они и не новые, просто мне раньше на глаза не попадались )

3

Ещё одна игрушка на stc15 - https://mysku.ru/blog/aliexpress/53312.html
STC15W408AS + DS1302 + NY3P065
http://s5.uploads.ru/cGeri.jpg
http://s1.uploads.ru/yG4Pc.jpg

update
Замена firmware - https://github.com/aFewBits/stc-led-clock
(и пример программирования stc15 на sdcc)

Отредактировано vt340 (2017-07-12 22:18:13)

4

Всем привет!
Достал из коробки давно лежавшую макетку STC15F2K60S2 + CH340G (UART-USB), припаял штыревые вилки PLS, подключил к компьютеру через по USB, в системе обнаружился последовательный порт, поставил драйвер. Светодиоды RX и TX на макетке замигали и я понял, что идет обмен. Запустил программу HiperTerminal, в свойствах указал новый последовательный порт COM4 и скорость 9600, в HiperTerminal-е вижу строки. Нормальное начало.
PS: Тему нужно как-то по-человечески назвать, а не тремя звездочками. :)
http://s5.uploads.ru/t/hwvBe.jpg

http://sa.uploads.ru/t/uWMKf.png

Отредактировано Pridnya (2017-07-12 20:38:35)

5

Pridnya написал(а):

Нормальное начало.
PS: Тему нужно как-то по-человечески назвать, а не тремя звездочками. :)

Я с ними вообще душой отдыхаю, удивительно беспроблемные мк у китайцев получились )
Про звёздочки - хотел выделить раздел x51, но постеснялся, что только сам и буду туда писать, если хотя бы вдвоём будем, то можно наверно и выделить

6

vt340 написал(а):

Я с ними вообще душой отдыхаю, удивительно беспроблемные мк у китайцев получились )
Про звёздочки - хотел выделить раздел x51, но постеснялся, что только сам и буду туда писать, если хотя бы вдвоём будем, то можно наверно и выделить

Действительно интересный микроконтроллер, особенно в сравнении с классическим 8051, китаец многократно производительнее, его 35МГц эквивалентны 300-400МГц для классического.
Вчера вечером снял с макетки схему, ничего сложного нет: CH340G и STC15F2K60S2, на линиях UART_RX UART_TX светодиоды для индикации состояния, сначала смутил последовательно включенный диод на линии UART_RX STC15F2K60S2, но из DataSheet узнал, что это для защиты от попадания напряжения с CH340G на STC15F2K60S2 , и картинка такая есть с этим диодом. Только я так и не понял, зачем он мне, если на макетке STC15 и CH340G питаются от 5 вольт, диод включен в прямом направлении со  стороны микроконтроллера, вот с микроконтроллера 5 вольт может попасть на CH340G, а обратно уже нет. На картинке еще есть резистор 300 Ом в линии UART_TX, у меня его нет. У меня есть еще тактовая кнопка, она замыкает цепь база-эмиттер транзистора через который идет питание +5В, т.е. нажатие на кнопку эквивалентно сбросу питания.

Еще запустил последнюю версию STC ISP 6.86D, долго искал, как считать прошивку, которая прошита производителем и выдает строки в UART, так и не нашел, как её считать, потом нашел информацию, что прошивать можно, а читать - нельзя. Пока у меня нет никакого HEX-а, чтобы в случае затирания демо-прошивки снова что-то записать. Странно, что нельзя читать, если прошивка не защищена.

И еще я не понял такой момент: если микроконтроллер выдает на UART_TX строки, а линия UART_RX мигает, похоже, что микроконтроллер её просто переключает, то как тогда прошивается микроконтроллер через этот же UART? Как его ввести в режим аппаратного загрузчика. У тех же STM32 для этого есть линии BOOT0 и BOOT1 и три варианта переходов аппаратный загрузчик, RAM, PROGRAM FLASH, а здесь как? Нужно как-то сделать, чтобы МК был включен и "слушал" UART_RX, по которому придет команда от STC ISP?

Владимир, если не сложно - проясните. :) Может, прошивку (HEX) какой сбросите, чтобы порты клокали, например, с частотой 2-3 Гц. Вроде как прошивка должна подойти от другого МК из этой серии.
http://sh.uploads.ru/t/j8YsB.png

Отредактировано Pridnya (2017-07-14 08:51:52)

7

Тэкс, по пунктам )
Диод они ставят, чтоб программатор не подпитывал мк.
На tx у программатора без передачи торчит +5, а у мк внутренняя подтяжка ног к питанию, и через эту подтяжку даже с одной ноги ему может хватить, чтоб быть постоянно запитанным.
А ему это не надо, потому что в режим программирования он переходит от подачи питания, ждёт меандра от программатора в течение каких-то долей секунды, и если не дожидается, то переходит в нормальный режим выполнения программы из флеша.
Резистор в схеме нарисован - это они наверно страхуются от перегрузки по выходу tx мк, но точно не знаю.
Прошивка у него не считывается вообще в принципе, т.е. он всегда как бы в защищённом режиме и другого у него нет.
Тестовую программку вместе с готовым хексом и ассемблером выложил туда же, где всё про stc15 - https://yadi.sk/d/naqKh4e03EDEJU/STC15/test.zip

Код:
0000: 02 01 00         ljmp reset
000B:              .org 0xB
000B: 02 01 0B         ljmp systick
0100:              .org 0x100
                   
                   reset:
0100: 75 81 3F         mov sp, #0x3F
0103: D2 8C            setb tr0
0105: D2 A9            setb et0
0107: D2 AF            setb ea
0109: 80 FE            sjmp *
                   
                   systick:
010B: B2 92            cpl p1.2
010D: 32               reti

Таймер T0 работает systick-ом, при частоте мк 11059200 systick 14 Гц
P1.2 моргает 7 Гц, ну и можно любой другой пин поставить или несколько

Отредактировано vt340 (2017-07-14 20:45:13)

8

vt340 написал(а):

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

Таймер T0 работает systick-ом, при частоте мк 11059200 systick 14 Гц
P1.2 моргает 7 Гц, ну и можно любой другой пин поставить или несколько

Владимир, спасибо! По схемотехнике всё понятно, а вот загнать микроконтроллер в режим программирования удалось только к ночи. Оказывается, нужно запустить SCT ISP, выбрать HEX-файл, нажать на кнопку CheckMCU, после чего программа STC ISP начинает постоянно слать 7F вперемешку с еще какими-то байтами, а затем нужно нажать на макетке кнопку "Сброс питания микроконтроллера", и программа переводит микроконтроллер в режим аппаратного загрузчика. Я про 7F понял, только когда программный сниффер включил, постоянно молотит.

Теперь на P1.2 что-то клокает. Т.е. еще один шаг вперед.
http://se.uploads.ru/t/Ve0QY.png   http://s1.uploads.ru/t/2Chs4.png

Отредактировано Pridnya (2017-07-15 01:26:33)

9

Да, "меандром" я небрежно обозвал 0x7F, каюсь )
Там довольно витиеватый пакетный протокол, причём разный для разных чипов
Для stc15f10x я его расписывал на easyelectronics - http://forum.easyelectronics.ru/viewtop … 70#p451770

10

Владимир, а не могли бы вы пояснить мне, как человеку не знакомому с x51 такой вопрос:
если просто переключать вывод порта P0_0, то один этот вывод и переключается, а если добавить небольшую задержку (вроде бы обычный синтаксис), то вижу пачки импульсов с некой периодичностью на всех линиях порта P0 (P0_0...P0_7) и примерно аналогичная картина на P1, пачки импульсов на P1_0...P1_5 и P1_7. Странно как-то.
Вот сишный код из примеров к Reads51 v4.52, пример blink (это я чуть подправил пример).

Код:
#include <sfr51.h>
main(){
int n;

 while(1)
  {
   for(n=0; n<5; n++) {;} // waste some cycles 
   P0_0^=1;
   for(n=0; n<5; n++) {;} // waste some cycles 
   P0_0^=1;  
   }
}

11

У x51 двойной доступ к некоторым адресам - байтовый и битовый, наподобие bit banding у кортексов
Наверно этот компилятор считает ^=1 байтовым

12

vt340 написал(а):

У x51 двойной доступ к некоторым адресам - байтовый и битовый, наподобие bit banding у кортексов
Наверно этот компилятор считает ^=1 байтовым

С операцией "Исключающее ИЛИ" (^=1) всё в порядке, вопрос появляется при добавлении строк кода задержки (for), импульсы похожи на обмен по UART или SPI, см. скриншот на P0_6 и P0_7 (откуда там эти импульсы, я же к ним нигде не обращаюсь). И что-то многовато кода генерит - целых 2 килобайта HEX. Наверное, что-то с компилятором IDE Reads51 v4.52. А без строк задержки частота на P1_0 около 1 МГц, если дважды написать P1_0=0; P1_0=0;..., то частота уменьшается в два раза, т.е. это этот самый код в HEXe.

Код:
int n;
while(TRUE)
{
P1_0=0; // LED on
for(n=0; n<10000; n++); // waste some cycles
P1_0=1; // LED off
for(n=0; n<10000; n++); // waste some cycles
}


http://s9.uploads.ru/t/Lhf56.png

Вопрос решен. По умолчанию IDE Reads51 v4.52 генерит код для внешней памяти, а нужно переключить на внутреннюю. У меня же на макетке только STC15F2K60S2 (и CH340 USB-UART). Я про это не знал. Теперь строки с задержкой не вносят ничего странного, работает правильно.

PS: Вот UART бы еще включить.
http://s2.uploads.ru/t/sjDb1.png

Отредактировано Pridnya (2017-07-18 10:47:25)

13

Тогда возможно мк пытается к внешней ram обращаться
stc15f2k60 - это же не игрушка stc15w20x, а reads51 не 15К-байтный as31 - там и таргеты и модели памяти вроде надо настраивать

Пока писал это, уже опоздал с ответом )
Про UART - готовый пример на 574 странице даташита

Отредактировано vt340 (2017-07-18 10:53:46)

14

vt340 написал(а):

Тогда возможно мк пытается к внешней ram обращаться
stc15f2k60 - это же не игрушка stc15w20x, а reads51 не 15К-байтный as31 - там и таргеты и модели памяти вроде надо настраивать

Пока писал это, уже опоздал с ответом )
Про UART - готовый пример на 574 странице даташита

Отредактировано vt340 (Сегодня 10:53:46)

Про обращение к внешней памяти я догадался, но все равно спасибо.

Пример из DataSheet заработал, ide k3.6. Ещё один шаг вперед.

Я вообще пишу для PIC и STM32, и там и там есть регистры управления приемопередатчиком и биты состояний "буфер пуст", здесь искал что-то аналогичное, а его нет. Очень непривычно, но разобраться можно.

Вот пока не понял, как функцию printf() переопределить для вывода в Uart1. Буду пробовать.

PS: Странный DataSheet, текст выделяется, поиск работает, а копировать текст невозможно - приходится код руками печатать. Китайцы намудрили.
http://sa.uploads.ru/t/JfwVY.png

Отредактировано Pridnya (2017-07-18 23:28:44)

15

Дим, разблокировщиков пдф в сети как грязи...

16

dosikus написал(а):

Дим, разблокировщиков пдф в сети как грязи...

Спасибо, но заблокированный PDF я сначала скачал из архива Владимира на Яндекс-диске, а затем эту же PDF-ку с официального сайта, а, оказывается на неофициальномсайте  (а там, кто его знает, какое он имеет отношение к официальному) есть немного отличающаяся разблокированная версия DataSheet http://www.stcmicro.com/datasheet/STC15F2K60S2-en.pdf . Я её теперь и использую.

Микроконтроллер хороший, код на Си получается компактный. Только не привычно после PIC-ов и STM-ов, т.к. архитектура старовата (нет столько битов управления тем же UART-ом..., система тактирования простая...). Но пользоваться можно и нужно. Нужно знать и уметь, не всё же всегда делать на STM32. :)

Отредактировано Pridnya (2017-07-21 08:31:37)

17

Тред на дваче про 8051 и stc - https://2ch.hk/ra/res/258237.html - люблю такое )
http://s7.uploads.ru/t/IuLx5.png
http://s0.uploads.ru/t/0mCX6.png
http://s1.uploads.ru/t/ehPQU.png

18

vt340 написал(а):

Тред на дваче

Эко их колбасит.
Тем временем мы не одиноки,  microsin разродился циклом статей - http://microsin.net/programming/msc51/index.html

19

Отрыл на офсайте примеры , от них во всю воняет SPL ...По убивал бы ...
Дань моде? Копипаст с стм? Или прородители сплни?

Код:
u8	GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx)
{
	if(GPIO > GPIO_P5)        return 1;	//空操作
	if(GPIOx->Mode > GPIO_OUT_PP)	return 2;	//错误
	if(GPIO == GPIO_P0)
	{
    if(GPIOx->Mode == GPIO_PullUp)    P0M1 &= ~GPIOx->Pin,	P0M0 &= ~GPIOx->Pin;	 //上拉准双向口
    if(GPIOx->Mode == GPIO_HighZ)    P0M1 |=  GPIOx->Pin,	P0M0 &= ~GPIOx->Pin;	 //浮空输入
    if(GPIOx->Mode == GPIO_OUT_OD)    P0M1 |=  GPIOx->Pin,	P0M0 |=  GPIOx->Pin;	 //开漏输出
    if(GPIOx->Mode == GPIO_OUT_PP)    P0M1 &= ~GPIOx->Pin,	P0M0 |=  GPIOx->Pin;	 //推挽输出
	}
	if(GPIO == GPIO_P1)
	{
    if(GPIOx->Mode == GPIO_PullUp)    P1M1 &= ~GPIOx->Pin,	P1M0 &= ~GPIOx->Pin;	 //上拉准双向口
    if(GPIOx->Mode == GPIO_HighZ)    P1M1 |=  GPIOx->Pin,	P1M0 &= ~GPIOx->Pin;	 //浮空输入
    if(GPIOx->Mode == GPIO_OUT_OD)    P1M1 |=  GPIOx->Pin,	P1M0 |=  GPIOx->Pin;	 //开漏输出
    if(GPIOx->Mode == GPIO_OUT_PP)    P1M1 &= ~GPIOx->Pin,	P1M0 |=  GPIOx->Pin;	 //推挽输出
	}
	if(GPIO == GPIO_P2)
	{
    if(GPIOx->Mode == GPIO_PullUp)    P2M1 &= ~GPIOx->Pin,	P2M0 &= ~GPIOx->Pin;	 //上拉准双向口
    if(GPIOx->Mode == GPIO_HighZ)    P2M1 |=  GPIOx->Pin,	P2M0 &= ~GPIOx->Pin;	 //浮空输入
    if(GPIOx->Mode == GPIO_OUT_OD)    P2M1 |=  GPIOx->Pin,	P2M0 |=  GPIOx->Pin;	 //开漏输出
    if(GPIOx->Mode == GPIO_OUT_PP)    P2M1 &= ~GPIOx->Pin,	P2M0 |=  GPIOx->Pin;	 //推
Код:
#define	GPIO_Pin_0    0x01	//IO引脚 Px.0
#define	GPIO_Pin_1    0x02	//IO引脚 Px.1
#define	GPIO_Pin_2    0x04	//IO引脚 Px.2
#define	GPIO_Pin_3    0x08	//IO引脚 Px.3
#define	GPIO_Pin_4    0x10	//IO引脚 Px.4
#define	GPIO_Pin_5    0x20	//IO引脚 Px.5
#define	GPIO_Pin_6    0x40	//IO引脚 Px.6
#define	GPIO_Pin_7    0x80	//IO引脚 Px.7
#define	GPIO_Pin_All	0xFF	//IO所有引脚
	
#define	GPIO_P0    	0    //
#define	GPIO_P1    	1
#define	GPIO_P2    	2
#define	GPIO_P3    	3
#define	GPIO_P4    	4
#define	GPIO_P5    	5


typedef struct
{
	u8	Mode;    //IO模式,      GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
	u8	Pin;    //要设置的端口	
} GPIO_InitTypeDef;

u8	GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx);

#endif

20

Кстати, о каких новых идет речь? https://2ch.hk/ra/res/258237.html

21

dosikus написал(а):

Кстати, о каких новых идет речь? https://2ch.hk/ra/res/258237.html

STC8, вот для сравнения тайминги stc15 и stc8

Код:
acall addr11            4 3             mov   @ri, #data8       2 1
                                        mov   @ri, a            2 1
add   a, #data8         2 1             mov   @ri, direct       3 1
add   a, @ri            2 1             mov   a, #data8         2 1
add   a, direct         2 1             mov   a, @ri            2 1
add   a, rn             1 1             mov   a, direct         2 1
                                        mov   a, rn             1 1
addc  a, #data8         2 1             mov   bit, c            3 1
addc  a, @ri            2 1             mov   c, bit            2 1
addc  a, direct         2 1             mov   direct, #data8    3 1
addc  a, rn             1 1             mov   direct, @ri       3 1
                                        mov   direct, a         2 1
ajmp  addr11            3 3             mov   direct, direct    3 1
                                        mov   direct, rn        2 1
anl   a, #data8         2 1             mov   dptr, #data16     3 1
anl   a, @ri            2 1             mov   rn, #data8        2 1
anl   a, direct         2 1             mov   rn, a             1 1
anl   a, rn             1 1             mov   rn, direct        3 1
anl   c, /bit           2 1
anl   c, bit            2 1             movc  a, @a+dptr        5 4
anl   direct, #data8    3 1             movc  a, @a+pc          4 3
anl   direct, a         3 1
                                        movx  @dptr, a          3 2
cjne  @ri, #data8, rel  5 2/3           movx  @ri, a            4 3
cjne  a, #data8, rel    4 1/3           movx  a, @dptr          2 2
cjne  a, direct, rel    5 2/3           movx  a, @ri            3 3
cjne  rn, #data8, rel   4 2/3
                                        mul   ab                2 2
clr   a                 1 1
clr   bit               3 1             nop                     1 1
clr   c                 1 1
                                        orl   a, #data8         2 1
cpl   a                 1 1             orl   a, @ri            2 1
cpl   bit               3 1             orl   a, direct         2 1
cpl   c                 1 1             orl   a, rn             1 1
                                        orl   c, /bit           2 1
da    a                 3 3             orl   c, bit            2 1
                                        orl   direct, #data8    3 1
dec   @ri               3 1             orl   direct, a         3 1
dec   a                 1 1
dec   direct            3 1             pop   direct            2 1
dec   rn                2 1
                                        push  direct            3 1
div   ab                6 6
                                        ret                     4 3
djnz  direct, rel       5 2/3
djnz  rn, rel           4 2/3           reti                    4 3

inc   @ri               3 1             rl    a                 1 1
inc   a                 1 1
inc   direct            3 1             rlc   a                 1 1
inc   dptr              1 1
inc   rn                2 1             rr    a                 1 1

jb    bit, rel          5 1/3           rrc   a                 1 1

jbc   bit, rel          5 1/3           setb  a                 1 1
                                        setb  bit               3 1
jc    relative          3 1/3
                                        sjmp  relative          3 3
jmp   @a+dptr           5 4
                                        subb  a, #data8         2 1
jnb   bit, rel          5 1/3           subb  a, @ri            2 1
                                        subb  a, direct         2 1
jnc   relative          3 1/3           subb  a, rn             1 1

jnz   relative          4 1/3           swap  a                 1 1

jz    relative          4 1/3           xch   a, @ri            3 1
                                        xch   a, direct         3 1
lcall addr16            4 3             xch   a, rn             2 1

ljmp  addr16            4 3             xchd  a, @ri            3 1

                                        xrl   a, #data8         2 1
                                        xrl   a, @ri            2 1
                                        xrl   a, direct         2 1
                                        xrl   a, rn             1 1
                                        xrl   direct, #data8    3 1
                                        xrl   direct, a         3 1

22

Не нахожу документацию на английском.

23

dosikus написал(а):

Не нахожу документацию на английском.

Её похоже и нет

Прочитал статью microsin
Эх, год назад надо было писать про stc15fxx и "симуляцию uart", сейчас это уже история )

24

vt340
Если будешь брать поделись ссылками.
Я пока возьму STC15W4K32S4 , IAP15W4K61S4.

25

Пока не будет даташита на английском не буду
Я за ними не успеваю разбираться с их isp протоколами, пока разбираюсь, они выпускают новую серию, причём по той же цене

26

Дошло до Сахары )

http://s0.uploads.ru/Q4vS2.jpg

27

vt написал(а):

Дошло до Сахары )

Упс :) засветился

28

Ещё одна игрушка на stc15.

D2-6 type bluetooth car kit is the latest version of D2 series kit, single-chip microcomputer as the core, through program control achieves tracking, obstacle avoidance, bluetooth mobile phone control
http://s3.uploads.ru/85soU.jpg
http://sf.uploads.ru/vVSsY.jpg

Описание и софт - https://files.banggood.com/2016/11/SKU503908.zip
Обзор [правда не D2-6, а D2-3] - http://www.instructables.com/id/D2-3-Tr … r-DIY-Kit/

29

Мне в свое время очень понравился проект Fleatiny, в нем используется STC12, но не сложно переделать на STC15 или STC8.

30

AI-Thinker Black Board T5 - https://www.watterott.com/en/ESP8266-Blackboard-T5

http://s3.uploads.ru/IM8rT.jpg
http://sa.uploads.ru/t/wnjht.png

Open source firmware - https://github.com/qalex/blackboard-STC15

Отредактировано vt (2018-12-11 10:56:39)


Вы здесь » Микроконтроллеры » vt » STC15 и STC8