STM32 F103C8T6

nikantovik
Offline
Зарегистрирован: 19.06.2015

Kost286 пишет:

Может забыли перемычку переторнуть БУТ0 к +3.3В и после этого ресетом сбросить?

У меня кстати тоже чего-то не видит ST-link-ом по SWD одни платы с stm32f103c8, а вот которые самые дешёвые с stm32f103c8 почему-то видит.

 

boot 0 на еденичку ресет нажимал, все ровно не помогает...

дело в том что он шился нормально и в один прекраснй момент перестал (((

Kost286
Offline
Зарегистрирован: 20.09.2016

Тогда понятно, косяк

russo
Offline
Зарегистрирован: 20.11.2014

Добрый день всем,

не могу понять, прошил загрузчик по инструкции https://geektimes.ru/post/277928/

как порт не отображаеться STM платка, высвечиваеться как libusb-win32 devices

почему?

https://hostingkartinok.com/show-image.php?id=199cb88af495d247ef2ee832655ff586

5N62V
Offline
Зарегистрирован: 25.02.2016

Всем бобра!

Мож тут кто подскажет.....  Короче затык у меня случился в освоении STM32. Короче начал с примерами играться на STM32F103C8T6.

С тактированием вроде разобрался. Уперся в то, что не могу скофигить PB0 как вход пуш-пул. Вроде по РМ все делал, но в цикле while(1) вызов функции led2 не наступает. Уж я его и к питанию притягивал, и к земле. То ли я с конфигурацией туплю, то ли с опросом..  Мож кто подскажет? Спасибо заранее!  

int main (void){
	RCC_init();
	GPIO_init();
	
	GPIOB->CRL |= 0x8; // SET PB0 as a pull-up input
	//GPIOB->ODR |= 0x1;
	led2();
	soft_delay(5000000);
	led2();
	soft_delay(5000000);
	led3();
	soft_delay(5000000);
	led3();
	while(1){

		if((GPIOB->IDR)&0x1)led2();
		else led3();
}
}

 

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

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

У вас судя по настройке выставился режим Alternat Output Open-Drain.

5N62V
Offline
Зарегистрирован: 25.02.2016

dimax пишет:

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

У вас судя по настройке выставился режим Alternat Output Open-Drain.

В любом случае спасибо за ответ.

Я . конечно , могу и умею ошибаться. Подправьте меня, если я не прав. Смотрим в РМ: 1000 соответствует Input pull- , а куда пул определяется записью в регистр ODR?  Я пробовал так делать, закаменченная строка.

Alternate Function  вроде не долже у меня включаться, т.к. биты MODE1 MODE0 нулевые. 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

5N62V, да, я тоже невнимательно посмотрел. Не Output. Но всё равно косяк ваш есть. Посмотрите на reset defaults -там бит CNF0 уже стоит. Командой |= вы к нему подписываете ещё и CNF1, получается недокументированная комбинация в регистре CRL *1100

5N62V
Offline
Зарегистрирован: 25.02.2016

dimax пишет:

5N62V, да, я тоже невнимательно посмотрел. Не Output. Но всё равно косяк ваш есть. Посмотрите на reset defaults -там бит CNF0 уже стоит. Командой |= вы к нему подписываете ещё и CNF1, получается недокументированная комбинация в регистре CRL *1100

И действительно: Reset value: 0x4444 4444, а я думаю нафига они регистры в примерах обнуляют? :)))))

Спасибо огромное!  Убежал пробовать! 

Kost286
Offline
Зарегистрирован: 20.09.2016

c spl  удобнее всего программировать, не ошибёшься. И подсказки в коококс есть почти как в вижуал студии 

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);
5N62V
Offline
Зарегистрирован: 25.02.2016

dimax пишет:

 получается недокументированная комбинация в регистре CRL *1100

Спасибо! Вы оказались абсолютно правы. Все заработало:

int main (void){
	RCC_init();
	GPIO_init();
	GPIOB->CRL &= ~(1<<2);// clear the CNF0 bit of PB0
	GPIOB->CRL |= 0x8; // SET PB0 as an input 
	GPIOB->ODR |= 0x1;//SET PB0 as a pull-up input
	led2();
	soft_delay(5000000);
	led2();
	soft_delay(5000000);
	led3();
	soft_delay(5000000);
	led3();
	while(1){

		if((GPIOB->IDR)&0x1)led2();
		else led3();
}

Кост286 пишет:
c spl  удобнее всего программировать, не ошибёшься. И подсказки в коококс есть почти как в вижуал студии 

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);
Да, я видел эти примеры. Но не понял как мне настроить несколько пинов на одном порту, а лазить по библиотекам я могу, но читать чужой код у меня плохо получается. Много времени забирает. Быстрее самому написать , да и здорово это стимулирует к дружбе с РМ.

Хотя , наверное, в будущем это не помешает перейти на пользование spl. Кстати, а где есть толковое описание спл?

Kost286
Offline
Зарегистрирован: 20.09.2016

 Просто плохо смотрели

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_3 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);
Kost286
Offline
Зарегистрирован: 20.09.2016

вообще примеров много и описаний к ним.

вот тут хорошие примеры. 

http://www.avislab.com/blog/stm32-gpio_ru/

 

5N62V
Offline
Зарегистрирован: 25.02.2016

я видел такое обозначение, просто неясно, последующее

 

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

настраивает все три пина? А если я перед этим настраивал входы на этом же порту , то данные не затрутся? Я потому и спросил есть ли внятное описание. 

5N62V
Offline
Зарегистрирован: 25.02.2016

ага, видел этот ресурс, сохранил в закладках. :)

Kost286
Offline
Зарегистрирован: 20.09.2016

а например если ты не знаешь какую шину нужно включить для подключения spi2 RCC_APB2 или RCC_APB1, то к коококсе можно навести мышь на RCC_APB2PeriphClockCmd в к примеру RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

и посмотреть саму процедуру RCC_APB2PeriphClockCmd, там в начале список всех блоков для шины APB2. Если нет там, то заменяем на RCC_APB1PeriphClockCmd.

Т.е. в даташит смотреть не нужно особо.

5N62V
Offline
Зарегистрирован: 25.02.2016

мммм.... ну заманчиво, конечно. Но у меня Keil стоит. 

Kost286
Offline
Зарегистрирован: 20.09.2016

не затруться.

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_3 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - это просто указывает разную ёмкость вывода, осорбо не влияет 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; - это значит вход с подтяжкой
GPIO_Init(GPIOB, &GPIO_InitStructure);

 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1| GPIO_Pin_2 | GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; - выход Output push-pull

GPIO_Init(GPIOB, &GPIO_InitStructure);

 

Kost286
Offline
Зарегистрирован: 20.09.2016

мне очень понравился коококс. всё удобно, библиотеки подключаются установкой галочки в списке и опа, библиотеки скопировались в проект и осталось только написать в коде например #include "stm32f10x_tim.h" - таймеры

310
Offline
Зарегистрирован: 21.01.2018

STM32F103C8T6 от RobotDyn прошитый уже под arduinoIDE

распаковал zip в harware, скачал в менеджере плат ядро Arduino SAM BoardsБ установли драйвера: Maple Serial.

Выставил generic STM32F103C series/64k/72Mhz/stm32duino bootloader/Smallest

В окне порта сразу стал выводиться раз в секунду HelloWorld!

Из примеров взял blink - заменил ногу на PC13 - залилось - мигает.

Стал шить helloWorld - выдает ошибку:

arm-none-eabi-g++: error: C:\Users\AppData\Local\Temp\Arduino_cache_246299\core\caor_arduino_STM32-master_stm32F1_genericSTM32F103c_device_variant......(многа букв "настройки"): No such file or directory

exit status 1

ошибка компиляции для платы.

 

Спасает только перезагрузка ноута. После перезагрузки первый раз = шьется, второй раз = ошибка.

Подскажите куда копать?

UPD: arduino IDE 1.8.5 с правами админа.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Logik пишет:

\\\\Подробнее... или как уже говорилось выше?

А подробней здесь - http://www.stm32duino.com/viewforum.php?f=1 Качаете, ставите в папку рядом с проектами, версию IDE поновей я когдато на 1.6.5 переходил из-за этого, драйвера 2шт., там хитро ставятся, я когдато описывал подробно на форуме, ищите, не старше года.

Что-то не нашел, DFU устройство стало, а COM порта нету (((

Юрий48
Offline
Зарегистрирован: 19.06.2018

Здравствуйте. Здесь я первый раз. Имею платку Blue pill. Нахожусь на стадии "созерцания". Работать с ней хочу через ардуино. Это тоже первый раз. Пока вопросы такой: "Как через ардуино вести полноценную конфигурацию входов выходов для указанной платы? STM32CubeMX здесь может помочь или надо использовать что то другое?"

b707
Offline
Зарегистрирован: 26.05.2017

Юрий48 пишет:

"Как через ардуино вести полноценную конфигурацию входов выходов для указанной платы? STM32CubeMX здесь может помочь или надо использовать что то другое?"

Если хотите вести "через ардуино" - значит через нее и делайте. STM32CubeMX совсем другая история и с ардуино несовместим.

Что вы имеете в виду под  "полноценной конфигурацией" ?  Режимы GPIO Ардуино-ИДЕ поддерживает все, настройки встроенной переферии только некоторые. Но все. что нет в макросах Ардуины, вы всегда можете настроить вручную, прямую запись в регистры никто не отменял.

Вопрос в другом - зачем цепляться за ардуину, если нужна "полноценная конфигурация" ? - для STM32 есть gcc и примерно дюжина разных сред разработки

Юрий48
Offline
Зарегистрирован: 19.06.2018

b707 пишет:
Режимы GPIO Ардуино-ИДЕ поддерживает все

Что про это посмотреть в смысле непосредственного программирования?

b707 пишет:
Вопрос в другом - зачем цепляться за ардуину, если нужна "полноценная конфигурация"? - для STM32 есть gcc и примерно дюжина разных сред разработки

На данном этапе "полноценная конфигурация" мне не нужна, а вопрос задал для того, чтобы понять, если в для ардуино какой то простенький конфигуратор. Уж простите.

Среды разработки надо осваивать. По простому считаю, что осваивать на первом этапе следует то, на что больше всего обучающей информации, ну, и то, что просто попроще. А что бы выбирать самому, так это ж надо их знать. Честно говоря, разработку хотел вести в Keil, поскольку очень давно я в нём немного делал для силабовских микроконтроллеров. Упёрся в то, что при использовании кейловского PackInstaller не мог достучаться до их сервера даже при использования VPN. А поскольку и так в этом слаб, решил слить в ардуино, тем более, что нашёл все необходимые для моей задачи библиотеки и примеры.

И ещё вопрос новичка. Вот связка: обсуждаемая плата, ST-Link и Ардуино-ИДЕ. Какие возможности при отладки даёт эта связка?

b707
Offline
Зарегистрирован: 26.05.2017

Юрий48 пишет:

И ещё вопрос новичка. Вот связка: обсуждаемая плата, ST-Link и Ардуино-ИДЕ. Какие возможности при отладки даёт эта связка?

Боюсь ошибится, но по моему связка STM32+ ST-Link в Ардуино-ИДЕ вообще не поддерживается. Для прошивки кода в плату в Ардуино-ИДЕ в первую очередь используется USART  Хотя, возможно, я и ошибаюсь.

Во всяком случае внутрисхемной отладки там точно нет. Честно говоря, я и не вижу особой необходимости.

Kost286
Offline
Зарегистрирован: 20.09.2016

я как-то уже писал, но повторюсь - с нуля лучше всего использовать CooCox 1.7.8

тут куча примеров и скачать с яндекс диска сразу - http://www.avislab.com/blog/stm32-ide_ru/

а тут как настроить - http://cxem.net/mc/mc172.php

Юрий48
Offline
Зарегистрирован: 19.06.2018

b707 пишет:
Боюсь ошибится, но по моему связка STM32+ ST-Link в Ардуино-ИДЕ вообще не поддерживается.

В ардуино в пункте Upload Method  можно выбрать STLink. Правда, что за этим стоит не знаю.

Kost286, признателен за совет, количество примеров и качество описания впечатляет, хотя нужных мне примеров там не нашёл. Вот, опять я напрягся (главное не задымиться): только немного вник в интерфейс Ардуино, а тут CooCox, да ещё англоязычный. Где то читал, что его поддержка прекращена. Хотя не исключено, что стартовые мытарства могут привести к нему.

Как то затерялся мой вопрос, касающийся информации по программированию в ардуино режимов GPIO.

Kost286
Offline
Зарегистрирован: 20.09.2016

в нём пожно делать всё. Поддержка тут не причём. Для каких -то новых контроллеров это играет роль, но не для таких, коими мы пользуемся. Там реализовано всё что могут эти контроллеры. И удобно сделаны подсказки. Ардуино - это как блокнот, тупа текст набираешь. А коококс как в вижуал студии, предлагает варианты. Да плюс при наведении мыши на какую-то функцию сразу в окне видишь её код и можно перейти к месту её описания. Это вообще сказка.

Юрий48
Offline
Зарегистрирован: 19.06.2018

Kost286, Вы всё же заставили меня проработать этот путь (CooCox). В первую очередь это касается поиска готовых примеров для моих нужд, а именно:

1. Работа с индикатором LCD1602A через I2C

2. Работа с платкой 24 разрядного АЦП (2 шт) HX711

3. И мелочёвка - пара светодиодов и тройка кнопочек.

Сегодня уж нет сил заниматься этим поиском. Если у кого на слуху, то буду признателен за ссылки.

Kost286
Offline
Зарегистрирован: 20.09.2016

на счёт hx711

тут на cvavr переделывал. Но всё что надо поменять, это вместо например PORTD.0 = 0; поставить например  GPIO_ResetBits(GPIOA, GPIO_Pin_1); - это значит установить ножку 1 порта А в 0

Вместо например PIND.1 == 1 (это проверяли равнао ли 1 ножка 1 порта D) поставить например GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 1 - равна ли ножка 0 порта А единице.

 

ну может ещё #asm("nop"); убрать, вместо этого задержку в пару микросекунд поставить

 

 

unsigned char GAIN = 3;        // amplification factor
long OFFSET = 0;    // used for tare weight
float SCALE = 1;    // used to return weight in grams, kg, ounces, whatever
int32_t adc_value = 0;
 
void set_gain(unsigned char gain) {
    switch (gain) {
        case 128:        // channel A, gain factor 128
            GAIN = 1;
            break;
        case 64:        // channel A, gain factor 64
            GAIN = 3;
            break;
        case 32:        // channel B, gain factor 32
            GAIN = 2;
            break;
    }
 
    PORTD.0 = 0;
    read();
}
 
unsigned char is_ready(void) 
{
    return PIND.1 == 0;
}
 
uint32_t Weighing(void)
{
    uint8_t i = 0;
    adc_value = 0;
 
    PORTD.0 = 0;
    //ждём пока закончится преобразование
    while(PIND.1);
    
    for(i=0; i<24; i++)
    {
        //поднимаем строб
        PORTD.0 = 1; 
        //сдвигаем значение АЦП влево, теперь значение АЦП выглядит так .......0
        adc_value <<= 1;
        //опускаем строб
        PORTD.0 = 0; 
        //проверяем, что на выводе data, если ноль то самый правый символ так и останется ноль .......0
        //если 1, то самый правый символ будет один .......1
        if(PIND.1 == 1)
        {
            adc_value++;
        }    
    }
 
    for (i = 0; i < 3; i++) {
        PORTD.0 = 1;
        #asm("nop");
        #asm("nop");
        PORTD.0 = 0;
        #asm("nop");
    }
    
    return adc_value;
}
 
long read(void) {
    unsigned int i;
    unsigned long value = 0;
    uint8_t data[3] = {0, 0, 0};
    uint8_t filler = 0x00; 
   
    // wait for the chip to become ready
    while (PIND.1) {
        #asm("nop");
    } 
 
    // pulse the clock pin 24 times to read the data
    data[2] = shiftIn(MSBFIRST);
    data[1] = shiftIn(MSBFIRST);
    data[0] = shiftIn(MSBFIRST);
 
    //выборки будем брать с канала А, с коэф.усиления 64
    //поэтому стробируем еще 3 раза    
    // set the channel and the gain factor for the next reading using the clock pin
    for (i = 0; i < GAIN; i++) {
        PORTD.0 = 1;
        #asm("nop");    
        #asm("nop");
        PORTD.0 = 0;
        #asm("nop");
        #asm("nop");
    }
  
    // Replicate the most significant bit to pad out a 32-bit signed integer
    if (data[2] & 0x80) {
        filler = 0xFF;
    } else {
        filler = 0x00;
    }
    
    // Construct a 32-bit signed integer
    value = (unsigned long)(filler) << 24 | (unsigned long)(data[2]) << 16 | (unsigned long)(data[1]) << 8 | (unsigned long)(data[0]);
           
    //*(unsigned long*)value = *(unsigned long*)data;        
    return (long)(value);  
   
}
 
long read_average(unsigned char times) {
    long sum = 0;
    unsigned char i;
    
    for (i = 0; i < times; i++) {
        sum += read();
        //yield();
        #asm("nop");
    }
    return sum / times;
}
 
float get_value(unsigned char times) {
    return read_average(times) - OFFSET;
}
 
float get_units(unsigned char times) {
    return get_value(times) / SCALE;
}
 
void tare(unsigned char times) {
    float sum;
    sum = read_average(times);
    set_offset(sum);
}
 
void set_scale(float scale) {
    SCALE = scale;
}
 
float get_scale(void) {
    return SCALE;
}
 
void set_offset(long offset) {
    OFFSET = offset;
}
 
long get_offset(void) {
    return OFFSET;
}
 
uint8_t shiftIn(uint8_t bitOrder) {
    uint8_t value = 0;
    uint8_t i;
 
    for (i = 0; i < 8; ++i) { 
    #asm("nop");
        PORTD.0 = 1;   //clock H
        #asm("nop");
        if (bitOrder == LSBFIRST)
            value |= PIND.1 << i;
        else
            value |= PIND.1 << (7 - i);
        PORTD.0 = 0;  //clock L       
    }
    return value;
}
 
void power_down711(void) {
PORTD.0 = 0;
    #asm("nop");
    PORTD.0 = 1;
    #asm("nop");
}
 
void power_up711(void) {
PORTD.0 = 0;
Kost286
Offline
Зарегистрирован: 20.09.2016

а вообще для такого экрана и такого ацп и меги8 за глаза хватит. 

b707
Offline
Зарегистрирован: 26.05.2017

Kost286, за 2 года на форуме не научились код выкладывать? Я вот хотел прокомментировать ваш вариант библиотеки - но номеров строк нет, как мне это сделать? Отредактируйте код, пожалуйста.

Юрий48, все что вы хотите - отлично решается в среде ардуино для СТМ32. Ради этого нет нужды осваивать Кокос, разве что ради обучения...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

b707 пишет:

 отлично решается в среде ардуино для СТМ32. 

А чо, так можно было?  О_О 

nik182
Offline
Зарегистрирован: 04.05.2015

Одна только пошаговая отладка в кокосе стоит всех прелестей ардуины.

Kost286
Offline
Зарегистрирован: 20.09.2016

я не знаю как номера строк вставить.

А что там комментировать? Ну is_ready и Weighing можно убрать. Они не используются.

А остальное всё как должно быть. У меня дома весы сделаны и на работе машина для проверки балочек бетонных на изгиб (т.е. давит пока она не сломается). А вся конструкция где лежит балочка закреплена на тонном тензодатчике. Всё прекрасно.

Kost286
Offline
Зарегистрирован: 20.09.2016

вот не заметил, пропустил

#define LSBFIRST 0
#define MSBFIRST 1
Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Kost286 пишет:

я не знаю как номера строк вставить.

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

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

nik182 пишет:

Одна только пошаговая отладка в кокосе стоит всех прелестей ардуины.

Плюсую, пошаговая отладка это вещь. Мне очень пригодилась в Atmel Studio, когда осваивал пререферию AVR  на низком уровне. А потом и STM легче осваивать. Для STM сейчас вообще много IDE появилось. Жаль кокос похерили.

Kost286
Offline
Зарегистрирован: 20.09.2016

всё понял, спасибо.

А что опять кокос? В версии 1.7.8 есть всё что надо. Ну кончился. Сама среда от этого хуже не стала. А то что новые модели контроллеров не будут поддерживать, так оно и не надо.

Kost286
Offline
Зарегистрирован: 20.09.2016

а я всё время пользовался кодевиженом. И сейчас пользуюсь. А отладка если надо, то в протеусе она есть и все переменные видны и адреса и всё

b707
Offline
Зарегистрирован: 26.05.2017

Kost286 пишет:

я не знаю как номера строк вставить.

пипец... как же ты берешься советы давать в форуме? :)

Kost286 пишет:

А что там комментировать?

а то, что вот эти строчки в процедуре read()

 while (PIND.1) {
        #asm("nop");
    } 

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

b707
Offline
Зарегистрирован: 26.05.2017

nik182 пишет:

Одна только пошаговая отладка в кокосе стоит всех прелестей ардуины.

это флейм конечно, но я прекрасно без нее живу. И в большом ПК практически никогда дебаггером не пользовался. 95% ошибок вылазит на этапе компиляции и линковки, почти все остальные при тестовом прогоне. Те, что остаются - обычно плавающие баги, которые то есть, то нет. Их ловить труднее всего. Но и тут не вижу, как может помочь внутрисхемная отладка. Сидеть с ноутом рядом с блоком управления станком целыми днями вряд ли станешь - куда полезнее сливать отладочную инфу в логфайл, что можно делать и без "железных" средств отладки.

Kost286
Offline
Зарегистрирован: 20.09.2016

Причём тут советы и знать номер строк как выставлять, никогда не делал и не интересовался. И к чему умничать. 

Тут уж как кому нравится. Хочешь в цикле виси, хочешь счётчик вводи, хочешь таймер. Если это весы и самая главная вещь ацп, то если он отвалился так и работать уже нечему. А тем более кто не сильно разбирается такой вариант намного понятнее и проще, а как придёт время и сам поймёт что надо и как сделать.

 

b707
Offline
Зарегистрирован: 26.05.2017

Kost286 пишет:

Причём тут советы и знать номер строк как выставлять, никогда не делал и не интересовался. И к чему умничать. 

знакомая психология  - "не знаю и разбираться не хочу". А кто вам на ошибки указывает - тот "умничает".

Ну-ну... зачем только с советами лезть с таким подходом.

Kost286
Offline
Зарегистрирован: 20.09.2016

И где ж от вас указание на ошибки согласуется с моим "умничает"? И "не знаю и разбираться не хочу" тут вообще не применима. Нормальный человек мне просто сказал как вставлять код и без лишних слов. Не стал восхвалять себя.

вот это и есть по умному на самом деле. 

Kost286
Offline
Зарегистрирован: 20.09.2016
Юрий48
Offline
Зарегистрирован: 19.06.2018

Ого, сколько набеседовали. Спасибо всем. Пошаговая отладка, может, мне и не понадобится, но как то уверенней чувствуеш, когда знаешь, что она есть. CooCox так CooCox. Жалко, что он не русифицирован. К стати, а что значит CooCox? Надеюсь, что за уход в CooCox меня из темы не выкинут. Что связываться с STM8, если программ по нему значительно меньше, а 50 р разница это не компенсирует, и массовое производство не для меня.

Kost286, спасибо за конкретные примеры. Жалко, что до конкретной работы руки дойдут не скоро. А так, по горячм следам было бы не плохо.

И ещё. Как печально читать перепалку на 70% не по существу. Хорошо бы пользовать правилом - даёш конкретный совет или задаёшь вопрос по существу, а мнение об аппоненте оставь при себе. Простите за морализацию.

Юрий48
Offline
Зарегистрирован: 19.06.2018

Вобщем опять скатился в ардуино. Пришла платка I2C для индикатора LCD1602, собрал схему. Скачал под ардуино 1.8.5 стартовую библиотеку для STM32F103C8 от сюда и для индикатора LCD1602 c интерфейсом I2C от сюда. В менеджере плат инициализировал 32-bits ARM Cortex-M3, Подключил библиотеки. STM32 ST-LINK Utility плату видит. Даже не опробовав пример Blink (вот самонадеянность) сразу загрузил пример HelloWorld. Светодиодик перестал мигать, дисплей светится но на нём ничего нет, пдсветку крутил. Исправив ножку с 1 на 13 попробоавл пример Blink. Светодиод не мигает. Теперь встаёт куча вопросов.Какие мероприятия я должен сделать, что бы понять

1. что с платой?

2. что с прошивкой?

3. И вообще как правильно загружать новую программу, может, предварительно надо стирать предыдущую?

4. Какие варианта выхода на правильную работу?

b707
Offline
Зарегистрирован: 26.05.2017

Юрий48 - как вы загружали прошивки - через SWIM интерфейс СТ-Линком или через USB Арлуино ИДЕ?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Юрий48, работать с стм32 под ардуино IDE конечно просто, но есть свои особенности. Многие ключевые вещи описаны в документации.  В команде pinMode например существенные отличия. Но это всё сразу видно.  А есть вещи, которые описаны, но найти это описание не так то просто. Вот взять I2C. Их на плате 2шт +  один из них можно ремапнуть на другие порты. Соответссно есть специальные функции, которые нужно выполнить для инициализации нужного порта. Вы ведь  не инициализировали I2C перед тем, как с ним работать?  :) И это ещё не всё, в аддоне стм32 используется своя библиотека wire(), она совместима с обычной, но всё таки есть небольшие нюансы.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

dimax, а если установить в IDE плату LeafLabs, она падёть для BluePill на STM32F103С8T6, или под нее другое что-то в boards.txt прописывать надо.  Валяюца 5 голубых таблеток, да все руки нидаходють пропробовать. :)