Тема: STM32 Software SPI та Сзувні регістри із засувкою 74HC595
Можливо пишу не в ту вітку, прошу модераторів перенести тему, якщо це потрібно.
Друзі, є декілька плат зі світлодіодними лінійками що з'єднуються одна в одну. Таких плат може бути від одної до 5 а може і більше. Платами керує МК STM32. На кожній платі 32 світлодіоди якими управляють 4 мікросхеми 74HC595. Проблема полягає в тому, що я "не дуже програміст" а ще, що розробник плати контролера чомусь почепив ці мікросхеми мимо апаратного SPI. Тобто дригати ноги управління треба програмно. Де що я вже реалізував. А саме засвітити один світлодіод із будь якої кількості плат.
#define u32 uint32_t
#define INDRES_LOW HAL_GPIO_WritePin_LOW(IndRes_GPIO_Port, IndRes_Pin);
#define INDRES_HIGH HAL_GPIO_WritePin_HIGH(IndRes_GPIO_Port, IndRes_Pin);
#define INDLATCH_LOW HAL_GPIO_WritePin_LOW(GPIOB, IndLatch_Pin);
#define INDLATCH_HIGH HAL_GPIO_WritePin_HIGH(GPIOB, IndLatch_Pin);
#define INDDATA_LOW HAL_GPIO_WritePin_LOW(GPIOB, IndData_Pin);
#define INDDATA_HIGH HAL_GPIO_WritePin_HIGH(GPIOB, IndData_Pin);
#define INDCLK_LOW HAL_GPIO_WritePin_LOW(GPIOB, IndClk_Pin);
#define INDCLK_HIGH HAL_GPIO_WritePin_HIGH(GPIOB, IndClk_Pin);
#define IndikatorReset INDRES_LOW;INDRES_HIGH;INDLATCH_HIGH;INDLATCH_LOW;
u32 cnt = 0, kilkIndPlat = 2;
while (1)
{
// подальший код прокручується декілька раз в секунду
// тому лишнє вирізав щоб не мішало
cnt++;
if (cnt > kilkIndPlat * 32)
{
cnt = 1;
}
indOut(cnt); // Засвітка світлодіода
}
void indOut(u32 numberLed)// функція виводу одного світлодіода
{
IndikatorReset;
for (int i = 0; i < (kilkIndPlat * 32) + 1; i++)
{
INDCLK_HIGH;
if (i != numberLed - 1)
{
INDDATA_LOW;
}
else
{
INDDATA_HIGH;
}
INDCLK_LOW;
}
INDLATCH_HIGH;
INDLATCH_LOW;
}
Тут питання скоріше програмного характеру.
Як засвітити декілька світлодіодів?
А як засвітити якийсь світлодіод не погасивши той що раніше засвічував?
Я хотів би створити функцію що виглядала би приблизно так
void output(bool state, u32 numPlt, u32 numLed)
{
// а тут фіг лого знає що написатию... ((
}
Я пробував безліч варіантів, та то все марно, отримую якусь фігню. Дякую що дочитали