Мож тут кто подскажет..... Короче затык у меня случился в освоении 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();
}
}
Понятия "вход" и "пуш-пулл" взаимоисключают друг друга, ибо пуш-пулл -это один из режимов выхода.
У вас судя по настройке выставился режим Alternat Output Open-Drain.
В любом случае спасибо за ответ.
Я . конечно , могу и умею ошибаться. Подправьте меня, если я не прав. Смотрим в РМ: 1000 соответствует Input pull- , а куда пул определяется записью в регистр ODR? Я пробовал так делать, закаменченная строка.
Alternate Function вроде не долже у меня включаться, т.к. биты MODE1 MODE0 нулевые.
5N62V, да, я тоже невнимательно посмотрел. Не Output. Но всё равно косяк ваш есть. Посмотрите на reset defaults -там бит CNF0 уже стоит. Командой |= вы к нему подписываете ещё и CNF1, получается недокументированная комбинация в регистре CRL *1100
5N62V, да, я тоже невнимательно посмотрел. Не Output. Но всё равно косяк ваш есть. Посмотрите на reset defaults -там бит CNF0 уже стоит. Командой |= вы к нему подписываете ещё и CNF1, получается недокументированная комбинация в регистре CRL *1100
И действительно: Reset value: 0x4444 4444, а я думаю нафига они регистры в примерах обнуляют? :)))))
получается недокументированная комбинация в регистре 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 удобнее всего программировать, не ошибёшься. И подсказки в коококс есть почти как в вижуал студии
Да, я видел эти примеры. Но не понял как мне настроить несколько пинов на одном порту, а лазить по библиотекам я могу,
но читать чужой код у меня плохо получается. Много времени забирает. Быстрее самому написать , да и здорово это стимулирует к дружбе с РМ.
Хотя , наверное, в будущем это не помешает перейти на пользование spl. Кстати, а где есть толковое описание спл?
а например если ты не знаешь какую шину нужно включить для подключения spi2 RCC_APB2 или RCC_APB1, то к коококсе можно навести мышь на RCC_APB2PeriphClockCmd в к примеруRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
и посмотреть саму процедуру RCC_APB2PeriphClockCmd, там в начале список всех блоков для шины APB2. Если нет там, то заменяем на RCC_APB1PeriphClockCmd.
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz; - это просто указывает разную ёмкость вывода, осорбо не влияет
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU; - это значит вход с подтяжкой
GPIO_Init(GPIOB,&GPIO_InitStructure);
мне очень понравился коококс. всё удобно, библиотеки подключаются установкой галочки в списке и опа, библиотеки скопировались в проект и осталось только написать в коде например #include "stm32f10x_tim.h" - таймеры
В окне порта сразу стал выводиться раз в секунду 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
ошибка компиляции для платы.
Спасает только перезагрузка ноута. После перезагрузки первый раз = шьется, второй раз = ошибка.
А подробней здесь - http://www.stm32duino.com/viewforum.php?f=1 Качаете, ставите в папку рядом с проектами, версию IDE поновей я когдато на 1.6.5 переходил из-за этого, драйвера 2шт., там хитро ставятся, я когдато описывал подробно на форуме, ищите, не старше года.
Что-то не нашел, DFU устройство стало, а COM порта нету (((
Здравствуйте. Здесь я первый раз. Имею платку Blue pill. Нахожусь на стадии "созерцания". Работать с ней хочу через ардуино. Это тоже первый раз. Пока вопросы такой: "Как через ардуино вести полноценную конфигурацию входов выходов для указанной платы? STM32CubeMX здесь может помочь или надо использовать что то другое?"
"Как через ардуино вести полноценную конфигурацию входов выходов для указанной платы? STM32CubeMX здесь может помочь или надо использовать что то другое?"
Если хотите вести "через ардуино" - значит через нее и делайте. STM32CubeMX совсем другая история и с ардуино несовместим.
Что вы имеете в виду под "полноценной конфигурацией" ? Режимы GPIO Ардуино-ИДЕ поддерживает все, настройки встроенной переферии только некоторые. Но все. что нет в макросах Ардуины, вы всегда можете настроить вручную, прямую запись в регистры никто не отменял.
Вопрос в другом - зачем цепляться за ардуину, если нужна "полноценная конфигурация" ? - для STM32 есть gcc и примерно дюжина разных сред разработки
Что про это посмотреть в смысле непосредственного программирования?
b707 пишет:
Вопрос в другом - зачем цепляться за ардуину, если нужна "полноценная конфигурация"? - для STM32 есть gcc и примерно дюжина разных сред разработки
На данном этапе "полноценная конфигурация" мне не нужна, а вопрос задал для того, чтобы понять, если в для ардуино какой то простенький конфигуратор. Уж простите.
Среды разработки надо осваивать. По простому считаю, что осваивать на первом этапе следует то, на что больше всего обучающей информации, ну, и то, что просто попроще. А что бы выбирать самому, так это ж надо их знать. Честно говоря, разработку хотел вести в Keil, поскольку очень давно я в нём немного делал для силабовских микроконтроллеров. Упёрся в то, что при использовании кейловского PackInstaller не мог достучаться до их сервера даже при использования VPN. А поскольку и так в этом слаб, решил слить в ардуино, тем более, что нашёл все необходимые для моей задачи библиотеки и примеры.
И ещё вопрос новичка. Вот связка: обсуждаемая плата, ST-Link и Ардуино-ИДЕ. Какие возможности при отладки даёт эта связка?
И ещё вопрос новичка. Вот связка: обсуждаемая плата, ST-Link и Ардуино-ИДЕ. Какие возможности при отладки даёт эта связка?
Боюсь ошибится, но по моему связка STM32+ ST-Link в Ардуино-ИДЕ вообще не поддерживается. Для прошивки кода в плату в Ардуино-ИДЕ в первую очередь используется USART Хотя, возможно, я и ошибаюсь.
Во всяком случае внутрисхемной отладки там точно нет. Честно говоря, я и не вижу особой необходимости.
Боюсь ошибится, но по моему связка STM32+ ST-Link в Ардуино-ИДЕ вообще не поддерживается.
В ардуино в пункте Upload Method можно выбрать STLink. Правда, что за этим стоит не знаю.
Kost286, признателен за совет, количество примеров и качество описания впечатляет, хотя нужных мне примеров там не нашёл. Вот, опять я напрягся (главное не задымиться): только немного вник в интерфейс Ардуино, а тут CooCox, да ещё англоязычный. Где то читал, что его поддержка прекращена. Хотя не исключено, что стартовые мытарства могут привести к нему.
Как то затерялся мой вопрос, касающийся информации по программированию в ардуино режимов GPIO.
в нём пожно делать всё. Поддержка тут не причём. Для каких -то новых контроллеров это играет роль, но не для таких, коими мы пользуемся. Там реализовано всё что могут эти контроллеры. И удобно сделаны подсказки. Ардуино - это как блокнот, тупа текст набираешь. А коококс как в вижуал студии, предлагает варианты. Да плюс при наведении мыши на какую-то функцию сразу в окне видишь её код и можно перейти к месту её описания. Это вообще сказка.
тут на 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
Kost286, за 2 года на форуме не научились код выкладывать? Я вот хотел прокомментировать ваш вариант библиотеки - но номеров строк нет, как мне это сделать? Отредактируйте код, пожалуйста.
Юрий48, все что вы хотите - отлично решается в среде ардуино для СТМ32. Ради этого нет нужды осваивать Кокос, разве что ради обучения...
А что там комментировать? Ну is_ready и Weighing можно убрать. Они не используются.
А остальное всё как должно быть. У меня дома весы сделаны и на работе машина для проверки балочек бетонных на изгиб (т.е. давит пока она не сломается). А вся конструкция где лежит балочка закреплена на тонном тензодатчике. Всё прекрасно.
Одна только пошаговая отладка в кокосе стоит всех прелестей ардуины.
Плюсую, пошаговая отладка это вещь. Мне очень пригодилась в Atmel Studio, когда осваивал пререферию AVR на низком уровне. А потом и STM легче осваивать. Для STM сейчас вообще много IDE появилось. Жаль кокос похерили.
А что опять кокос? В версии 1.7.8 есть всё что надо. Ну кончился. Сама среда от этого хуже не стала. А то что новые модели контроллеров не будут поддерживать, так оно и не надо.
пипец... как же ты берешься советы давать в форуме? :)
Kost286 пишет:
А что там комментировать?
а то, что вот эти строчки в процедуре read()
while (PIND.1) {
#asm("nop");
}
- это бредятина, которая вешает программу, если у вас чип весов почему-либо недоступен. Вместо того, чтоб генерить какую-то ошибку или отваливатся по таймауту - вешает наглухо. И этот ляп кочует по всем реализациям библиотеки много лет. Уж сколько об этом автору писали - а он все отмалчивается.
Одна только пошаговая отладка в кокосе стоит всех прелестей ардуины.
это флейм конечно, но я прекрасно без нее живу. И в большом ПК практически никогда дебаггером не пользовался. 95% ошибок вылазит на этапе компиляции и линковки, почти все остальные при тестовом прогоне. Те, что остаются - обычно плавающие баги, которые то есть, то нет. Их ловить труднее всего. Но и тут не вижу, как может помочь внутрисхемная отладка. Сидеть с ноутом рядом с блоком управления станком целыми днями вряд ли станешь - куда полезнее сливать отладочную инфу в логфайл, что можно делать и без "железных" средств отладки.
Причём тут советы и знать номер строк как выставлять, никогда не делал и не интересовался. И к чему умничать.
Тут уж как кому нравится. Хочешь в цикле виси, хочешь счётчик вводи, хочешь таймер. Если это весы и самая главная вещь ацп, то если он отвалился так и работать уже нечему. А тем более кто не сильно разбирается такой вариант намного понятнее и проще, а как придёт время и сам поймёт что надо и как сделать.
И где ж от вас указание на ошибки согласуется с моим "умничает"? И "не знаю и разбираться не хочу" тут вообще не применима. Нормальный человек мне просто сказал как вставлять код и без лишних слов. Не стал восхвалять себя.
Ого, сколько набеседовали. Спасибо всем. Пошаговая отладка, может, мне и не понадобится, но как то уверенней чувствуеш, когда знаешь, что она есть. CooCox так CooCox. Жалко, что он не русифицирован. К стати, а что значит CooCox? Надеюсь, что за уход в CooCox меня из темы не выкинут. Что связываться с STM8, если программ по нему значительно меньше, а 50 р разница это не компенсирует, и массовое производство не для меня.
Kost286, спасибо за конкретные примеры. Жалко, что до конкретной работы руки дойдут не скоро. А так, по горячм следам было бы не плохо.
И ещё. Как печально читать перепалку на 70% не по существу. Хорошо бы пользовать правилом - даёш конкретный совет или задаёшь вопрос по существу, а мнение об аппоненте оставь при себе. Простите за морализацию.
Вобщем опять скатился в ардуино. Пришла платка 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. И вообще как правильно загружать новую программу, может, предварительно надо стирать предыдущую?
Юрий48, работать с стм32 под ардуино IDE конечно просто, но есть свои особенности. Многие ключевые вещи описаны в документации. В команде pinMode например существенные отличия. Но это всё сразу видно. А есть вещи, которые описаны, но найти это описание не так то просто. Вот взять I2C. Их на плате 2шт + один из них можно ремапнуть на другие порты. Соответссно есть специальные функции, которые нужно выполнить для инициализации нужного порта. Вы ведь не инициализировали I2C перед тем, как с ним работать? :) И это ещё не всё, в аддоне стм32 используется своя библиотека wire(), она совместима с обычной, но всё таки есть небольшие нюансы.
dimax, а если установить в IDE плату LeafLabs, она падёть для BluePill на STM32F103С8T6, или под нее другое что-то в boards.txt прописывать надо. Валяюца 5 голубых таблеток, да все руки нидаходють пропробовать. :)
Может забыли перемычку переторнуть БУТ0 к +3.3В и после этого ресетом сбросить?
У меня кстати тоже чего-то не видит ST-link-ом по SWD одни платы с stm32f103c8, а вот которые самые дешёвые с stm32f103c8 почему-то видит.
boot 0 на еденичку ресет нажимал, все ровно не помогает...
дело в том что он шился нормально и в один прекраснй момент перестал (((
Тогда понятно, косяк
Добрый день всем,
не могу понять, прошил загрузчик по инструкции https://geektimes.ru/post/277928/
как порт не отображаеться STM платка, высвечиваеться как libusb-win32 devices
почему?
https://hostingkartinok.com/show-image.php?id=199cb88af495d247ef2ee832655ff586
Всем бобра!
Мож тут кто подскажет..... Короче затык у меня случился в освоении STM32. Короче начал с примерами играться на STM32F103C8T6.
С тактированием вроде разобрался. Уперся в то, что не могу скофигить PB0 как вход пуш-пул. Вроде по РМ все делал, но в цикле while(1) вызов функции led2 не наступает. Уж я его и к питанию притягивал, и к земле. То ли я с конфигурацией туплю, то ли с опросом.. Мож кто подскажет? Спасибо заранее!
Понятия "вход" и "пуш-пулл" взаимоисключают друг друга, ибо пуш-пулл -это один из режимов выхода.
У вас судя по настройке выставился режим Alternat Output Open-Drain.
Понятия "вход" и "пуш-пулл" взаимоисключают друг друга, ибо пуш-пулл -это один из режимов выхода.
У вас судя по настройке выставился режим Alternat Output Open-Drain.
Я . конечно , могу и умею ошибаться. Подправьте меня, если я не прав. Смотрим в РМ:
1000 соответствует Input pull- , а куда пул определяется записью в регистр ODR? Я пробовал так делать, закаменченная строка.
Alternate Function вроде не долже у меня включаться, т.к. биты MODE1 MODE0 нулевые.
5N62V, да, я тоже невнимательно посмотрел. Не Output. Но всё равно косяк ваш есть. Посмотрите на reset defaults -там бит CNF0 уже стоит. Командой |= вы к нему подписываете ещё и CNF1, получается недокументированная комбинация в регистре CRL *1100
5N62V, да, я тоже невнимательно посмотрел. Не Output. Но всё равно косяк ваш есть. Посмотрите на reset defaults -там бит CNF0 уже стоит. Командой |= вы к нему подписываете ещё и CNF1, получается недокументированная комбинация в регистре CRL *1100
Спасибо огромное! Убежал пробовать!
c spl удобнее всего программировать, не ошибёшься. И подсказки в коококс есть почти как в вижуал студии
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
получается недокументированная комбинация в регистре CRL *1100
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
Хотя , наверное, в будущем это не помешает перейти на пользование spl. Кстати, а где есть толковое описание спл?
Просто плохо смотрели
вообще примеров много и описаний к ним.
вот тут хорошие примеры.
http://www.avislab.com/blog/stm32-gpio_ru/
я видел такое обозначение, просто неясно, последующее
настраивает все три пина? А если я перед этим настраивал входы на этом же порту , то данные не затрутся? Я потому и спросил есть ли внятное описание.
http://www.avislab.com/blog/stm32-gpio_ru/
а например если ты не знаешь какую шину нужно включить для подключения spi2 RCC_APB2 или RCC_APB1, то к коококсе можно навести мышь на RCC_APB2PeriphClockCmd в к примеру RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
и посмотреть саму процедуру RCC_APB2PeriphClockCmd, там в начале список всех блоков для шины APB2. Если нет там, то заменяем на RCC_APB1PeriphClockCmd.
Т.е. в даташит смотреть не нужно особо.
мммм.... ну заманчиво, конечно. Но у меня Keil стоит.
не затруться.
мне очень понравился коококс. всё удобно, библиотеки подключаются установкой галочки в списке и опа, библиотеки скопировались в проект и осталось только написать в коде например #include "stm32f10x_tim.h" - таймеры
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 с правами админа.
\\\\Подробнее... или как уже говорилось выше?
А подробней здесь - http://www.stm32duino.com/viewforum.php?f=1 Качаете, ставите в папку рядом с проектами, версию IDE поновей я когдато на 1.6.5 переходил из-за этого, драйвера 2шт., там хитро ставятся, я когдато описывал подробно на форуме, ищите, не старше года.
Что-то не нашел, DFU устройство стало, а COM порта нету (((
Здравствуйте. Здесь я первый раз. Имею платку Blue pill. Нахожусь на стадии "созерцания". Работать с ней хочу через ардуино. Это тоже первый раз. Пока вопросы такой: "Как через ардуино вести полноценную конфигурацию входов выходов для указанной платы? STM32CubeMX здесь может помочь или надо использовать что то другое?"
"Как через ардуино вести полноценную конфигурацию входов выходов для указанной платы? STM32CubeMX здесь может помочь или надо использовать что то другое?"
Если хотите вести "через ардуино" - значит через нее и делайте. STM32CubeMX совсем другая история и с ардуино несовместим.
Что вы имеете в виду под "полноценной конфигурацией" ? Режимы GPIO Ардуино-ИДЕ поддерживает все, настройки встроенной переферии только некоторые. Но все. что нет в макросах Ардуины, вы всегда можете настроить вручную, прямую запись в регистры никто не отменял.
Вопрос в другом - зачем цепляться за ардуину, если нужна "полноценная конфигурация" ? - для STM32 есть gcc и примерно дюжина разных сред разработки
Что про это посмотреть в смысле непосредственного программирования?
На данном этапе "полноценная конфигурация" мне не нужна, а вопрос задал для того, чтобы понять, если в для ардуино какой то простенький конфигуратор. Уж простите.
Среды разработки надо осваивать. По простому считаю, что осваивать на первом этапе следует то, на что больше всего обучающей информации, ну, и то, что просто попроще. А что бы выбирать самому, так это ж надо их знать. Честно говоря, разработку хотел вести в Keil, поскольку очень давно я в нём немного делал для силабовских микроконтроллеров. Упёрся в то, что при использовании кейловского PackInstaller не мог достучаться до их сервера даже при использования VPN. А поскольку и так в этом слаб, решил слить в ардуино, тем более, что нашёл все необходимые для моей задачи библиотеки и примеры.
И ещё вопрос новичка. Вот связка: обсуждаемая плата, ST-Link и Ардуино-ИДЕ. Какие возможности при отладки даёт эта связка?
И ещё вопрос новичка. Вот связка: обсуждаемая плата, ST-Link и Ардуино-ИДЕ. Какие возможности при отладки даёт эта связка?
Боюсь ошибится, но по моему связка STM32+ ST-Link в Ардуино-ИДЕ вообще не поддерживается. Для прошивки кода в плату в Ардуино-ИДЕ в первую очередь используется USART Хотя, возможно, я и ошибаюсь.
Во всяком случае внутрисхемной отладки там точно нет. Честно говоря, я и не вижу особой необходимости.
я как-то уже писал, но повторюсь - с нуля лучше всего использовать CooCox 1.7.8
тут куча примеров и скачать с яндекс диска сразу - http://www.avislab.com/blog/stm32-ide_ru/
а тут как настроить - http://cxem.net/mc/mc172.php
В ардуино в пункте Upload Method можно выбрать STLink. Правда, что за этим стоит не знаю.
Kost286, признателен за совет, количество примеров и качество описания впечатляет, хотя нужных мне примеров там не нашёл. Вот, опять я напрягся (главное не задымиться): только немного вник в интерфейс Ардуино, а тут CooCox, да ещё англоязычный. Где то читал, что его поддержка прекращена. Хотя не исключено, что стартовые мытарства могут привести к нему.
Как то затерялся мой вопрос, касающийся информации по программированию в ардуино режимов GPIO.
в нём пожно делать всё. Поддержка тут не причём. Для каких -то новых контроллеров это играет роль, но не для таких, коими мы пользуемся. Там реализовано всё что могут эти контроллеры. И удобно сделаны подсказки. Ардуино - это как блокнот, тупа текст набираешь. А коококс как в вижуал студии, предлагает варианты. Да плюс при наведении мыши на какую-то функцию сразу в окне видишь её код и можно перейти к месту её описания. Это вообще сказка.
Kost286, Вы всё же заставили меня проработать этот путь (CooCox). В первую очередь это касается поиска готовых примеров для моих нужд, а именно:
1. Работа с индикатором LCD1602A через I2C
2. Работа с платкой 24 разрядного АЦП (2 шт) HX711
3. И мелочёвка - пара светодиодов и тройка кнопочек.
Сегодня уж нет сил заниматься этим поиском. Если у кого на слуху, то буду признателен за ссылки.
на счёт 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"); убрать, вместо этого задержку в пару микросекунд поставить
а вообще для такого экрана и такого ацп и меги8 за глаза хватит.
Kost286, за 2 года на форуме не научились код выкладывать? Я вот хотел прокомментировать ваш вариант библиотеки - но номеров строк нет, как мне это сделать? Отредактируйте код, пожалуйста.
Юрий48, все что вы хотите - отлично решается в среде ардуино для СТМ32. Ради этого нет нужды осваивать Кокос, разве что ради обучения...
отлично решается в среде ардуино для СТМ32.
А чо, так можно было? О_О
Одна только пошаговая отладка в кокосе стоит всех прелестей ардуины.
я не знаю как номера строк вставить.
А что там комментировать? Ну is_ready и Weighing можно убрать. Они не используются.
А остальное всё как должно быть. У меня дома весы сделаны и на работе машина для проверки балочек бетонных на изгиб (т.е. давит пока она не сломается). А вся конструкция где лежит балочка закреплена на тонном тензодатчике. Всё прекрасно.
вот не заметил, пропустил
я не знаю как номера строк вставить.
Ты когда сообщение пишешь, выше панель с кнопочками есть. Найти нужную кнопку для вставки кода не должно составить труда.
Одна только пошаговая отладка в кокосе стоит всех прелестей ардуины.
Плюсую, пошаговая отладка это вещь. Мне очень пригодилась в Atmel Studio, когда осваивал пререферию AVR на низком уровне. А потом и STM легче осваивать. Для STM сейчас вообще много IDE появилось. Жаль кокос похерили.
всё понял, спасибо.
А что опять кокос? В версии 1.7.8 есть всё что надо. Ну кончился. Сама среда от этого хуже не стала. А то что новые модели контроллеров не будут поддерживать, так оно и не надо.
а я всё время пользовался кодевиженом. И сейчас пользуюсь. А отладка если надо, то в протеусе она есть и все переменные видны и адреса и всё
я не знаю как номера строк вставить.
пипец... как же ты берешься советы давать в форуме? :)
А что там комментировать?
а то, что вот эти строчки в процедуре read()
- это бредятина, которая вешает программу, если у вас чип весов почему-либо недоступен. Вместо того, чтоб генерить какую-то ошибку или отваливатся по таймауту - вешает наглухо. И этот ляп кочует по всем реализациям библиотеки много лет. Уж сколько об этом автору писали - а он все отмалчивается.
Одна только пошаговая отладка в кокосе стоит всех прелестей ардуины.
это флейм конечно, но я прекрасно без нее живу. И в большом ПК практически никогда дебаггером не пользовался. 95% ошибок вылазит на этапе компиляции и линковки, почти все остальные при тестовом прогоне. Те, что остаются - обычно плавающие баги, которые то есть, то нет. Их ловить труднее всего. Но и тут не вижу, как может помочь внутрисхемная отладка. Сидеть с ноутом рядом с блоком управления станком целыми днями вряд ли станешь - куда полезнее сливать отладочную инфу в логфайл, что можно делать и без "железных" средств отладки.
Причём тут советы и знать номер строк как выставлять, никогда не делал и не интересовался. И к чему умничать.
Тут уж как кому нравится. Хочешь в цикле виси, хочешь счётчик вводи, хочешь таймер. Если это весы и самая главная вещь ацп, то если он отвалился так и работать уже нечему. А тем более кто не сильно разбирается такой вариант намного понятнее и проще, а как придёт время и сам поймёт что надо и как сделать.
Причём тут советы и знать номер строк как выставлять, никогда не делал и не интересовался. И к чему умничать.
знакомая психология - "не знаю и разбираться не хочу". А кто вам на ошибки указывает - тот "умничает".
Ну-ну... зачем только с советами лезть с таким подходом.
И где ж от вас указание на ошибки согласуется с моим "умничает"? И "не знаю и разбираться не хочу" тут вообще не применима. Нормальный человек мне просто сказал как вставлять код и без лишних слов. Не стал восхвалять себя.
вот это и есть по умному на самом деле.
а вот по экрану
http://myelectronics55.ru/stm32-библиотека-для-работы-с-модулем-pcf8574at/
Ого, сколько набеседовали. Спасибо всем. Пошаговая отладка, может, мне и не понадобится, но как то уверенней чувствуеш, когда знаешь, что она есть. CooCox так CooCox. Жалко, что он не русифицирован. К стати, а что значит CooCox? Надеюсь, что за уход в CooCox меня из темы не выкинут. Что связываться с STM8, если программ по нему значительно меньше, а 50 р разница это не компенсирует, и массовое производство не для меня.
Kost286, спасибо за конкретные примеры. Жалко, что до конкретной работы руки дойдут не скоро. А так, по горячм следам было бы не плохо.
И ещё. Как печально читать перепалку на 70% не по существу. Хорошо бы пользовать правилом - даёш конкретный совет или задаёшь вопрос по существу, а мнение об аппоненте оставь при себе. Простите за морализацию.
Вобщем опять скатился в ардуино. Пришла платка 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. Какие варианта выхода на правильную работу?
Юрий48 - как вы загружали прошивки - через SWIM интерфейс СТ-Линком или через USB Арлуино ИДЕ?
Юрий48, работать с стм32 под ардуино IDE конечно просто, но есть свои особенности. Многие ключевые вещи описаны в документации. В команде pinMode например существенные отличия. Но это всё сразу видно. А есть вещи, которые описаны, но найти это описание не так то просто. Вот взять I2C. Их на плате 2шт + один из них можно ремапнуть на другие порты. Соответссно есть специальные функции, которые нужно выполнить для инициализации нужного порта. Вы ведь не инициализировали I2C перед тем, как с ним работать? :) И это ещё не всё, в аддоне стм32 используется своя библиотека wire(), она совместима с обычной, но всё таки есть небольшие нюансы.
dimax, а если установить в IDE плату LeafLabs, она падёть для BluePill на STM32F103С8T6, или под нее другое что-то в boards.txt прописывать надо. Валяюца 5 голубых таблеток, да все руки нидаходють пропробовать. :)