STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: STM32 новичку в ARM что к чему

Сообщение Мурик »

Sergeba писал(а): "аппаратной поддержке" пофиг и она пропускает пакет?
А вы включили эту аппаратную поддержку? В кубе это "Hardware Flow Control (RS485)".

Для этого МК я бы не стал использовать куб как кодогенератор. Если нужно упростить работу, лучше используйте SPL. Она требует меньше ресурсов и больше контроля над кодом.
Реклама
Sergeba
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Чт мар 28, 2019 23:41:10

Re: STM32 новичку в ARM что к чему

Сообщение Sergeba »

[uquote="Мурик",url="/forum/viewtopic.php?p=3604135#p3604135"][/quote]А вы включили эту аппаратную поддержку? В кубе это "Hardware Flow Control (RS485)".[/uquote]

Да, в том то и дело, что включил. И теперь пакеты летят через порт несмотря на то, как я дёргаю ногу. Причём всё ещё хуже... У меня на плате разведен сигнал DE+RE на ногу PA0, хотя по умолчанию в Кубе DE резервирует ногу PA1. После генерации кода, я вручную меняю на PA0 - пакеты идут - я их вижу, далее становиться вообще грустно (т.к. не втыкаю почему...) - один раз забыл поправить, в тексте остался PA1 и пакеты продолжили проходить не взирая на какие-то там сигналы и ноги... Такое впечатление, что я подключился не через "адаптер" RS485, а напрямую, через UART... Где же пропало управление потоком?

Добавлено after 5 hours 19 minutes 58 seconds:
Попробовал разные варианты. Получилось так:

1. Включаю аппаратную поддержку. Пакеты идут невзирая на дрыганье сигналом DE+RE
2. Выключаю аппаратную поддержку. Выход для DE не назначаю. Пакеты продолжают проходить. Предполагаю из-за того, что соответствующий выход имеет неопределённое значение.
3. Выключаю аппаратную поддержку. Назначаю выход для DE. Теперь всё в порядке - работает софтовое управление потоком.

Вот теперь вопрос. Как мне портировать Modbus? Тут, немного выше писали, что F0 имеет аппаратную поддержку Modbus, но что-то я не нашёл в RM такого...
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

[uquote="Sergeba",url="/forum/viewtopic.php?p=3604207#p3604207"]но что-то я не нашёл в RM такого...[/uquote]
Чип полностью озвучьте...
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Re: STM32 новичку в ARM что к чему

Сообщение baghear »

Добрый день, у меня модуль SDIO и дисплей используют один вывод и подключены через мультиплексор. Так как они не работают одновременно предполагалось изменять конфигурацию этого вывода по необходимости. С AF на PP конфигурация изменяется и работает без проблем, а вот обратно конфигурация изменяется, а пакетов нет. Подскажите пожалуйста, можно ли вообще так делать?

Код: Выделить всё

#define 	PD2_TFT_ON		GPIOE->BSRR = GPIO_BSRR_BR_5;\
						GPIOD->MODER &= ~GPIO_MODER_MODE2;\
						GPIOD->MODER |= GPIO_MODER_MODE2_0;
												 
#define   PD2_SDIO_ON		GPIOE->BSRR = GPIO_BSRR_BS_5;\
						GPIOD->MODER &= ~GPIO_MODER_MODE2;\
						GPIOD->MODER |= GPIO_MODER_MODE2_1;
Пробовал так же отключать тактирование SDIO пока оно не работает, не помогает.
Последний раз редактировалось baghear Чт апр 04, 2019 15:52:21, всего редактировалось 1 раз.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

Можно, конечно. Только отключать тактирование сконфигурированному и включенному модулю нехорошо. Лучше в настройках самого модуля его отключать.

А вот над этим стоит хорошенько задуматься.

Код: Выделить всё

GPIOE->BSRR |= GPIO_BSRR_BR_5;
Впрочем, и над этим тоже

Код: Выделить всё

GPIOD->MODER &= ~GPIO_MODER_MODE2;
GPIOD->MODER |= GPIO_MODER_MODE2_1;
Реклама
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Re: STM32 новичку в ARM что к чему

Сообщение baghear »

Опечатка, я не отключал тактирование модулю отключал сам модуль

Код: Выделить всё

RCC->APB2ENR &= ~RCC_APB2ENR_SDIOEN;
Поясните пожалуйста, почему над кодом выше надо задуматься?
Реклама
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

[uquote="baghear",url="/forum/viewtopic.php?p=3608772#p3608772"]Поясните пожалуйста, почему над кодом выше надо задуматься?[/uquote]Во-первых, все эти значки около операции присваивания что-то да значат. Во-вторых, как следствие первого, регистр BSRR только для чтения, зачем его читать?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение WiseLord »

VladislavS: А он его только пишет, не читая, если верить коду (исправленному?)
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Re: STM32 новичку в ARM что к чему

Сообщение baghear »

Ребята все заработало, проблема была в том, что по окончанию работы с дисплеем эта ножка устанавливается в низкое состояние. Установил в высокое и все заработало.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

[uquote="baghear",url="/forum/viewtopic.php?p=3608772#p3608772"]Поясните пожалуйста, почему над кодом выше надо задуматься?[/uquote]Над BSRR, вижу, поработали. А дальше? По коду вижу задачу поменять значения битов GPIO_MODER_MODER2_0 и GPIO_MODER_MODER2_1 на противоположные. Давай сравнивать.

Код: Выделить всё

//  GPIOD->MODER &= ~GPIO_MODER_MODER2;
        MOVS     R0,#+48
        MVNS     R0,R0            ;; #-49
        LDR      R1,??main_0      ;; 0x48000c00
        LDR      R2,[R1, #+0]
        ANDS     R2,R2,R0
        STR      R2,[R1, #+0]
//  GPIOD->MODER |= GPIO_MODER_MODER2_1;
        MOVS     R2,#+32
        LDR      R3,[R1, #+0]
        ORRS     R3,R3,R2
        STR      R3,[R1, #+0]

Код: Выделить всё

//  GPIOD->MODER = GPIOD->MODER & ~GPIO_MODER_MODER2 | GPIO_MODER_MODER2_1;
        LDR      R0,??main_0      ;; 0x48000c00
        LDR      R1,[R0, #+0]
        MOVS     R2,#+48
        BICS     R1,R1,R2
        MOVS     R2,#+32
        ORRS     R2,R2,R1
        STR      R2,[R0, #+0]

Код: Выделить всё

//  GPIOD->MODER ^= GPIO_MODER_MODER2;
        LDR      R0,??main_0      ;; 0x48000c00
        LDR      R1,[R0, #+0]
        MOVS     R2,#+48
        EORS     R2,R2,R1
        STR      R2,[R0, #+0]
Последний вариант, правда, надо применять очень "строго" и я бы его не рекомендовал. Зато, если режим работы других ножек на GPIOD не меняется, то рекомендовал бы просто запись новой константы в MODER.
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Re: STM32 новичку в ARM что к чему

Сообщение baghear »

VladislavS СПАСИБО!!!!Но армовский асм не мой конек да и кот должен быть читабельный)))
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

То есть, ты ничего не понял? Асм там только для демонстрации во что выливается С-ный код.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: STM32 новичку в ARM что к чему

Сообщение СКАЗОЧНИК »

А разве не в этой теме недавно обсуждали эти конструкции, где не надо отдельно каждый бит выписывать, что лучше делать сразу все? И тоже ассемблер приводили.

Добавлено after 1 minute 26 seconds:
Я бы тоже написал в две строки... Может не совсем рационально, но зато понятнее. )))
Станислав
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3609441#p3609441"]А разве не в этой теме недавно обсуждали[/uquote]Да где только не обсуждали, а толку?
Вон в соседней теме пишет

Код: Выделить всё

I2C1->DR |= data;
и сожалеет что приходится "выкручиваться" вот так

Код: Выделить всё

I2C1->DR = data;
Аватара пользователя
hosturik
Потрогал лапой паяльник
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

Re: STM32 новичку в ARM что к чему

Сообщение hosturik »

Подскажите как более правильно писать volatile перед типом переменной
Переписываю чужой проект, меняю его структуру, избавляюсь от глобальных переменных.
И столкнулся с одним моментом, который не совсем понятен и в гугле не знаю как правильно найти интересующий вопрос.
Есть два варианта, оба работают, но хотелось бы выбрать более правильный.

В первом варианте я пишу volatile перед названием структуры,
во втором пишу volatile перед типом каждой переменной в самой структуре
Абстрактный пример кода набросал, который передает суть

Код: Выделить всё

// Вариант 1
// file *.h
typedef struct
{
  uint16_t current_temperature;
  uint16_t round_temperature;
  uint16_t voltage;
  uint16_t power;
} parameter_st;

void func(volatile parameter_st *param);

// file *.c
volatile parameter_st parameter = {10, 20, 30, 40};

void func(volatile parameter_st *param)
{
	if(param->voltage > 1000) param->power = 80;
	else param->power = 0;
	
	if(param->voltage < 0xFFFF) param->voltage++;
	else param->voltage = 0;
}
void ***_IRQHandler(void) 
{
	func(&parameter);
}



// Вариант 2
// file *.h
typedef struct
{
  volatile uint16_t current_temperature;
  volatile uint16_t round_temperature;
  volatile uint16_t voltage;
  volatile uint16_t power;
} parameter_st;

void func(parameter_st *param);

// file *.c
parameter_st parameter = {10, 20, 30, 40};

void func(parameter_st *param)
{
	if(param->voltage > 1000) param->power = 80;
	else param->power = 0;
	
	if(param->voltage < 0xFFFF) param->voltage++;
	else param->voltage = 0;
}

void ***_IRQHandler(void) 
{
	func(&parameter);
}
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

hosturik, а нет никакого "как правильно", есть как надо вам в вашей программе. Что вы хотите от этой структуры?
1. Все структуры данного типа будут volatile как, например, регистры периферии в CMSIS.
2. Только конкретный экземпляр структуры будет volatile и возможно обычное её применение.
Нам то откуда знать? Ваша программа, вам и решать.
Аватара пользователя
hosturik
Потрогал лапой паяльник
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

Re: STM32 новичку в ARM что к чему

Сообщение hosturik »

VladislavS, Поскольку почти все элементы структуры будут изменятся в прерывании, важно чтобы программа работала правильно.
Структуры в моем случае нужны чтобы не плодить глобальные переменные. Я создаю переменную типа структуры в одном сишном файле и все нужные функции вызываю в нем, передавая в них указатель на структуру.
Итог - с более чем 30 глобальных переменных, их не стало вообще. И код стал намного чище. Под глобальными имею ввиду когда в хедере пишется extern uint8_t val; а в си файле то же самое но без extern.
И эта переменная будет видна везде где подключается этот хедер.
Такой стиль написания мне не понравился решил все переписать, чтобы было красиво.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18561
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение ARV »

typedef volatile struct {} my_struct_type; определит тип my_struct_type, который будет соответствовать вашей структуре с префиксом volatile.
все экземпляры структур этого типа будут исключены из оптимизации компилятора, т.е. доступ к ним и всем их полям будет, как к volatile-переменным.
можно создавать указатели на этот тип (в параметрах функций, например) и т.п.

но если вам вдруг потребуется создать, например, локальный экземпляр такой структуры (не-volatile то есть), типа для этого не найдется. вам об этом говорили.

поэтому лучше (имхо) определять алиас типа структуры, а префикс volatile указывать при определении конкретного экземпляра - если надо, конечно.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

hosturik, вы практически пришли к первому постулату ООП - инкапсуляция. Если ещё вспомнить, что в С++ struct и class это практически одно и то же, то можете смело перемещать функции в структуры, обзывать их методами и вместо структур создавать объекты.
horoc
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Сб янв 24, 2015 21:07:59

Re: STM32 новичку в ARM что к чему

Сообщение horoc »

Пытаюсь освоить stm32f100. Что значат эти цифры?
Program Size: Code=612 RO-data=304 RW-data=0 ZI-data=1632
На пустом проекте реально занято 1632 байт озу? Может я, по не знанию, что то не то подключил? Или это не ОЗУ?
Вложения
keil.png
(51.3 КБ) 420 скачиваний
Ответить

Вернуться в «ARM»