STM32 и SN74HC595 - может кому-то пригодится.
Была задача: измерять расход газа, в процессе которой на табло необходимо выводить несколько параметроа.
Схема устройства отображения информации
![Нажмите на изображение для увеличения
Название: Shema.gif
Просмотров: 400
Размер: 98.2 Кб
ID: 34667](https://kazus.ru/forums/attachment.php?attachmentid=34667&thumb=1&d=1336765343)
была построена на основе STM32F100C4 (DD1), SN74595 (DD2-6), ULN2803A (DD7-11) и ряда других
компонентов, но это уже не принципиально.
"Застрял" на проблеме. Вместо цифр на табло отображалась "светомузыка".
В процессе выявления причины обнаружил, что фронты SHcp микросхем SN74595 завалены. Причиной всего оказалась "мошенальная " ошибка.
При работе с STM я привык использовать при инициализации регистров "|="" вместо "=".
Вот пример кода с ошибкой ):
GPIOB-›ODR = 0x00000000;
GPIOB-›CRL |= 0x43344444; // !!!!!!!!!!!!!!!!!!!!!!!!!!
GPIOB-›CRH |= 0x44444433; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!
GPIOB-›LCKR |= 0x0000FFFF;
GPIOB-›LCKR |= 0x00010000;
GPIOB-›LCKR &= 0xFFFEFFFF;
GPIOB-›LCKR |= 0x00010000;
Вот правильный код инициализации:
//-----------Порта B--------------------
GPIOB-›ODR = 0x00000000;
GPIOB-›CRL = 0x43344444; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
GPIOB-›CRH = 0x44444433; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
GPIOB-›LCKR |= 0x0000FFFF;
GPIOB-›LCKR |= 0x00010000;
GPIOB-›LCKR &= 0xFFFEFFFF;
GPIOB-›LCKR |= 0x00010000;
----------------------------------
Разница отмечена как // !!!!!!!!!!!!!!!!!!!!!!!!!!!
Не смейтесь, но на поиск ошибки я потратил два дня!
(Если сразу не увидели разницу, то в первом варианте я делал операцию "0х04 или 0х03", что даёт 0х07, т.е. выход с открытым стоком,
а во втором случае - двухтактный выход. )
------------------------------------------------------
Хотя и с большим запозданием, но хочу поздравить всех участников форума с Днем Победы и сДнем Радио. Всем счастья, здоровья, исполения желаний.
ShYyB.