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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Мучитель микросхем
Сообщения: 413
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Сообщение Sergi »

У меня вот так

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

#define LCD       (*(__IO uint8_t *)((uint32_t)&(GPIOB->ODR) + 1))
#define LCD_DC_H	GPIOA->BSRR = GPIO_BSRR_BS8
#define LCD_DC_L	GPIOA->BSRR = GPIO_BSRR_BR8 
#define LCD_WR_H	GPIOB->BSRR = GPIO_BSRR_BS7
#define LCD_WR_L	GPIOB->BSRR = GPIO_BSRR_BR7

void lcd_send_cmd(uint8_t cmd)
{
    LCD_DC_L;
    LCD_WR_L;
    LCD = cmd;
    LCD_WR_H;
    LCD_DC_H;
};

void lcd_send_data(uint8_t data)
{
    LCD_WR_L;
    LCD = data;
    LCD_WR_H;
};
Реклама
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3757597#p3757597"]Самое прикольное, что это же будет и в более простом случае[/uquote]
Насколько помню на шине значения других байт дублируются, т.е. реально передается 0x5555'5555, при этом старшие 16 бит ODR просто отсутствуют, младшие 2 бита адреса игнорируются, потому 0x5555 вполне ожидаемое значение в обоих случаях.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Я больше верю себе, затем Reflector и RM. :)
Мучитель микросхем
Сообщения: 413
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Сообщение Sergi »

Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

И чего? Это говорит лишь о том, что твой индикатор устраивает одновременное появление data и WR=1 на шине.
Реклама
Мучитель микросхем
Сообщения: 413
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Сообщение Sergi »

Если закоментировать LCD_WR_H; изображения нет.

Добавлено after 1 minute 35 seconds:
Я думал что такой подход кому-то поможет. Применять или нет дело программера.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

[uquote="Reflector",url="/forum/viewtopic.php?p=3757586#p3757586"]И в ODR будет 0x5555.[/uquote]
Если старшее полуслово не используется, то почему бы и нет? Вполне работоспособная схема. Хоть и теоретически это UB.
Я, кстати, в какой-то железяке так гонял байты при помощи DMA - именно из массива uint8_t. Чтобы обеспечить параллельный интерфейс. Старшее полуслово не использовал, поэтому никаких косяков не было. Понятно, что если бы возникла необходимость использовать ногодрыг на пинах старшего полуслова, пришлось бы уже от uint8_t в массиве переходить на uint32_t и писать не в ODR, а в BSRR.
Последний раз редактировалось Eddy_Em Вт дек 17, 2019 15:45:01, всего редактировалось 1 раз.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Sergi",url="/forum/viewtopic.php?p=3757615#p3757615"]Если закоментировать LCD_WR_H; изображения нет.[/uquote]А откуда ему взяться, если ты в примерно половине случаев WR=1 не делаешь?

[uquote="Sergi",url="/forum/viewtopic.php?p=3757615#p3757615"]Я думал что такой подход кому-то поможет. Применять или нет дело программера.[/uquote]Мы же с Reflector показали, что это НЕ РАБОТАЕТ.

Добавлено after 1 minute 21 second:
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3757625#p3757625"]Если старшее полуслово не используется, то почему бы и нет?[/uquote]Ты вообще читаешь что люди пишут? Используется и влияет!
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

[uquote="Sergi",url="/forum/viewtopic.php?p=3757610#p3757610"]https://www.youtube.com/watch?v=uv0sqAAMHFA[/uquote]
А что это там за черная фиговина прицеплена к "таблетке"? Холл что ли?

Добавлено after 50 seconds:
[uquote="VladislavS",url="/forum/viewtopic.php?p=3757626#p3757626"]Ты вообще читаешь что люди пишут? Используется и влияет![/uquote]
На кой черт я буду лезть дальше двух-трех последних комментариев? Как будто делать нехрен, только всю ветку читать…
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

И ведь в RM есть прямой запрет так делать, а нет, всё равно советуют...
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

VladislavS, а не пофиг ли, что в RM запрещено?
Еще раз: если из порта используется только половина ног, скажем младшее полуслово, то вполне нормально писать при помощи DMA байтики в ODR! Это не приведет к поломке устройства или UB, покуда ноги второго полуслова настроены как аналоговые входы или alternate function.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Мучитель микросхем
Сообщения: 413
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Сообщение Sergi »

Черная - пьезопищалка. Изначально было про 8бит АЦП.
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3757639#p3757639"]Еще раз: если из порта используется только половина ног, скажем младшее полуслово, то вполне нормально писать при помощи DMA байтики в ODR![/uquote]
Sergi писал, что у него на второй половине порта, которая перезаписывается случайным образом, висит WR, энкодер, кнопки и EPROM. По-моему тут и один дисплей не должен нормально работать, разве что на очень низкой скорости, но если очень хочется отлавливать непонятно откуда взявшиеся баги, то почему нет :) И это все ради одной или двух лишних инструкций которые добавятся если в половинку порта писать через BSRR.
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Reflector, ну, понятно к чему дело - попытка сэкономить время и объем памяти, т.к. через BSRR пришлось бы городить преобразование 8 бит в 32 (единички - в одну половинку, нулики инвертировать - и в другую). А потом при помощи DMA гнать этот массив.
А насчет АЦП - если работает, ну и хрен с ним! Скажем, в STM8 было важно, в какой последовательности считываются полуслова (кажись, это в АЦП было, хотя точно уж не помню). Здесь же никаких флагов нет. Единственная проблема - невыровненный доступ. Но, к счастью, STM32 - little endian, а читать надо младший байт. Так что, все ОК.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3757639#p3757639"]VladislavS, а не пофиг ли, что в RM запрещено?[/uquote]Да, знаю, а если не будет работать "перепишешь модуль ядра".

Добавлено after 5 minutes 55 seconds:
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3757649#p3757649"]через BSRR пришлось бы городить преобразование 8 бит в 32 (единички - в одну половинку, нулики инвертировать - и в другую).[/uquote]Ууууу, да ты ещё и не знаешь как BSRR работает! Куда я попал...
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

VladislavS, в смысле не знаю? Одна половинка регистра устанавливает биты, другая - гасит. Что-то ты гонишь!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Если установлены и Set, и Reset биты одновременно, то приоритет имеет Set. Соответственно, ничего инвертировать и в другую половинку гнать не надо. Это, кстати, тоже в RM написано. Да кто же его читает...
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Это да, в левую половинку можно просто FFFF положить, а не инверсию нулей.
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Нельзя туда FFFF положить! Иначе UB будет. Только FF куда нужно.
Да кто же его читает...
Есть такое.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Почему вдруг?
Если мне надо в порт положить, например, число 0x5555, можно его просто в ODR записать, либо в BSRR положить 0xFFFF5555.

Или, если надо в младший байт число 0x55 записать, просто в BSRR положить 0x00FF0055. Какие-то дополнительные манипуляции с нулями (0x55 => 0xAA => 00AA0055) не нужны.
Контактная информация:
Ответить

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