Перейти к содержанию

stm32f103 spi max7219


Рекомендуемые сообщения

Приветствую.

При подключении микрухи MAX7219 столкнулся с проблемой, что она некорректно реагирует на отсылаемые ей данные.

Я уже ознакамливался с темами этого форума касательно аналогичной проблемы, но ответа так и не было.

Сигнал с анализатора:

Спойлер

image.png

 

Сигнал согласно даташиту:

Спойлер

image.png.1c92a82ad95c7be3c06ca63a2803a51d.png

 

Код:
 

Спойлер
int main()
{
    RCC_Init(); //инициализация тактирования
 
    LED_I::init();
 
    LED_I::send_command(0x9, 0xFF); // режим декодирования
    LED_I::send_command(0xB, 0x3); // количество разрядов
    LED_I::send_command(0xA, 0x2); // яркость
    LED_I::send_command(0xC, 0x1); // включаем
 
    LED_I::send_command(0x2, 0x2); // единица
 
    while(true);
    /*{
        for(uint8_t i = 0x1; i <= 0xF; ++i)
            LED_I::send_command(0xA, i); // яркость
        LED_I::__delay(100);
    }*/
    return 0;
}
 
void LED_I::__delay(volatile uint32_t ms)
{
    uint32_t _temp = __ticks;
    while((__ticks - _temp) < ms);
}
extern "C" void SysTick_Handler()
{
    ++LED_I::__ticks;
}
void LED_I::init()
{
    //тактирование порта B уже включено таймером
    //RCC->APB2ENR = RCC_APB2ENR_IOPBEN;
    SysTick_Config(72000000 / 1000);
    RCC->APB2ENR |= RCC_APB2ENR_SPI1EN | RCC_APB2ENR_IOPBEN | RCC_APB2ENR_IOPAEN; // запускаем тактирование SPI, PB
    
    SPI1->CR1 |= (1 << SPI_CR1_DFF_Pos)     // 16-битная передача
                | (1 << SPI_CR1_SSM_Pos)     // программный SS
                | (1 << SPI_CR1_SSI_Pos)
                | (1 << SPI_CR1_BIDIMODE_Pos)
                | (1 << SPI_CR1_BIDIOE_Pos)
                | (0 << SPI_CR1_LSBFIRST_Pos)
                | (0b111 << SPI_CR1_BR_Pos)
                | (1 << SPI_CR1_MSTR_Pos)
                | (0 << SPI_CR1_CPHA_Pos)
                | (0 << SPI_CR1_CPOL_Pos);
    SPI1->CR1 |= (1 << SPI_CR1_SPE_Pos);
    //SCK
    GPIOA->CRL |= (0b10 << GPIO_CRL_CNF5_Pos) | (0b11 << GPIO_CRL_MODE5_Pos);
  
    //CS
    GPIOB->CRH |= (0b00 <<GPIO_CRH_CNF11_Pos) | (0b11 << GPIO_CRH_MODE11_Pos);
    GPIOB->BSRR |= GPIO_BSRR_BS11;
    //MOSI
    GPIOA->CRL |= (0b10 << GPIO_CRL_CNF7_Pos) | (0b11 << GPIO_CRL_MODE7_Pos);
    while(SPI1->SR & SPI_SR_MODF);
}
 
void LED_I::send_command(const uint8_t &address, const uint8_t &command)
{
    GPIOB->BRR |= GPIO_BRR_BR11;
    //while(SPI1->SR & SPI_SR_BSY);
    
    //GPIOB->BRR |= GPIO_BRR_BR11;
 
    SPI1->DR = (address << 8) | command; // отслыем первым байтом адрес регистра, втором - команду для регистра
    //__delay(_FUNCTION_DELAY);
 
    //GPIOB->BSRR |= GPIO_BSRR_BS11;
    while (!(SPI1->SR & SPI_SR_TXE));
    //while (SPI1->SR & SPI_SR_RXNE);
    while(SPI1->SR & SPI_SR_BSY);
 
    GPIOB->BSRR |= GPIO_BSRR_BS11;
 
    __delay(1);
}

 

 

Подскажите, в чем я ошибся...
Вроде бы, все правильно.

Заранее спасибо!

 

Неправильно выразился: она вообще не реагирует на данные.
Подаю ей питание(сигнала с МК еще не было) - выводит то 4, то 3 разряда девяток.

Индикатор подключен 4-х разрядный.

Питание переподключаю - уже 3 разряда горят и т.д.

Запускаю МК, отправляю данные - никакой реакции нет.

Грешу еще на питание. с МК SPI выходит 3.3 В, а по даташиту MAX7219 высокий уровень понимает с 4+.
Питание ставил около 4 В на нее. Подавал с МК те же 3.3 В, но все равно не работает..

Но не принимаю как причину, ведь другие от СТМ32 заводят же ее как-то..

Изменено пользователем Иван Рогожников
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

2 часа назад, Иван Рогожников сказал:

с МК SPI выходит 3.3 В, а по даташиту MAX7219 высокий уровень понимает с 4+

Такое противоречие, и :

Цитата

Подскажите, в чем я ошибся...
Вроде бы, все правильно.

:wacko:

 

Что касается кода. Особо не вникал, но бросилось в глаза вот это :

const uint8_t &address
.....
(address << 8)

 

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

В целом, ничего незаконного. 
Принимаю значение по константной ссылке, чтобы не копировать объект.

12 часов назад, Alex сказал:

Что касается кода. Особо не вникал, но бросилось в глаза вот это

Диаграмма на анализаторе не изменилась. Отсылаемые значения именно на анализаторе показываются верные

 

 

12 часов назад, Alex сказал:
14 часов назад, Иван Рогожников сказал:

с МК SPI выходит 3.3 В, а по даташиту MAX7219 высокий уровень понимает с 4+

Такое противоречие, и :

Цитата

Подскажите, в чем я ошибся...
Вроде бы, все правильно.

:wacko:


Хм.....Но ведь другие же запускают ее от stm-ки..

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

16 часов назад, Иван Рогожников сказал:

она вообще не реагирует на данные

И не будет. По даташиту она воспринимает высокий уровень начиная с 3,5В, вне зависимости от напряжения питания. А МК дает лишь 3,3В.

 

16 часов назад, Иван Рогожников сказал:

по даташиту MAX7219 высокий уровень понимает с 4+

image.png.7b19b9e6c62499e4f97d06912bfe1ca4.png

1 час назад, Иван Рогожников сказал:

ведь другие же запускают ее от stm-ки..

Либо поднимать питание до 3,5В (при максимуме в 3,6В занятие сомнительное), либо ставить преобразователь уровня.

Ссылка на комментарий
Поделиться на другие сайты

подтверждаю. Чтобы 7219 нормально работала пришлось ставить буфер преобразователь уровней. От 3.3 нишиша не пашет

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

В 24.11.2021 в 13:40, Иван Рогожников сказал:

Принимаю значение по константной ссылке, чтобы не копировать объект.

Я не про ссылку. Хотя, и в этом есть странности - какой объект Вы не хотите копировать, 1 байт ? :D

Я говорил про ширину переменной и манипуляции с ней. Ничего не смущает ?

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...