Jump to content
Kirill Lubinets

STM32f303vc вывод на блок семисегментного дисплея

Recommended Posts

Необходимо выводить на блок из 4 семисегментных индикаторов данные, управление лежит на двух сдвиговых регистрах:
Первый хранит в себе число на вывод, второй адрес(адресует на конкретный разряд в блоке).

 

Данные передаю через аппаратный SPI, настроенный в STM32CubeMX, но он у меня не работает.

Мой алгоритм

Задаю наборы для отображения на индикаторе и адресные наборы для перемещения по разрядам в блоке.

 uint8_t i,j = 0;
  uint8_t buff[8] = {1,2,3,4,5,6,7,8};
  uint8_t digit[10] = { 
      0xC0, // 0
      0xF9, // 1
      0xA4, // 2
      0xB0, // 3
      0x99, // 4
      0x92, // 5
      0x82, // 6
      0xF8, // 7
      0x80, // 8
      0x90, // 9 
  };
  uint8_t chr[4] = { 
      0x8,  
      0x4,  
      0x2,  
      0x1  
  };

Строб необходим для начала записи данных в регистр хранения сдвигового регистра

void strob(void){
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
HAL_Delay(85);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);
HAL_Delay(85);
}

Функция передачи данных с использованием HAL функции и строба.
void spi_send(uint8_t *data, uint8_t it){
  strob();
 uint8_t *d = data;
  for(j = 0; j <=it; j++){
    d = &data[j];
  HAL_SPI_Transmit ( &hspi1, d, 8, 50); 
  }
  strob();
}

Отправляю смешение по элементам блока семисегментного индикатора.

  while (1)
  { i++;
    if(i<=4){
spi_send(chr, i);
  } else i = 4;
  i = -1;
  

s.7z

Файлы с IAR проектом и CubeMX проектом инициализации.

1dsfs.7z

Пример работы индикатора

video_2018-07-04_00-13-42.mp4

Share this post


Link to post
Share on other sites

Похоже, да. :)

Без указания модели индикатора, без схемы подключения и с неработающим аппаратным SPI вряд ли кто будет в вашем коде разбираться.

Share this post


Link to post
Share on other sites

Вебинар «МЭМС-датчики ST для работы со звуком – новые возможности» (28.10.2020)

28 октября все желающие приглашаются для участия в вебинаре, посвященном семейству МЭМС-датчиков STMicroelectronics для акустических приложений. Предметом детального рассмотрения на вебинаре станут микрофоны, их топологии применения и возможности. Вы услышите о новых мультирежимных широкодиапазонных микрофонах с нижним портом и PDM-интерфейсом для систем с батарейным питанием.

Подробнее

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения


  • Часы юного хакера :) DSTIKE Deauther

  • Similar Content

    • By Karl-Ieronim
      Коллеги, всем привет. 
      Увидел вот такой проект. 
      Несмотря на явную привлекательность что-то совсем мало повторивших. 
      Может кто-то из завсегдатаев форума делал этот проект? 
      Интересует ваше мнение: хочу повторить, но не силен в программировании, поэтому беспокоюсь на счёт подводных камней с которыми не смогу справиться. 
    • By Alexander Beznosikov
      Уважаемые гуру, подкинули мне задачку, для меня не решаемую.
      1. Есть потенциометр, на выходе которого напряжения в диапазоне от 0в до +1,92в.
      2. Есть индикатор (цифровой милливольтметр LxD5130) 1-999мв с шагом 1мв (1мв-1 на табло, 10мв-10 на табло и т.д.).
      Необходимо из диапазона напряжений 0-1,92в преобразовать в диапазон от 20мв до 160мв.
      Пробовал делитель напряжения, подогнать напряжения под необходимый диапазон не получается.
    • Guest User1324
      By Guest User1324
      Здравствуйте, помогите подключить USB-флешку к STM32F103RCT6, нужна дополнить принципиальную схему. Если есть возможность нарисовать.
    • By n_angelo
      Привет, знатоки. Написал свою первую программу для контроллера STM8L152C6T6 (STM8L-Discovery). Это, собственно, моя первая программа для контроллеров вообще. Я многого не знаю и не понимаю. Возможно ваш ответ на мой вопрос будет банален.
      Используемая периферия: DAC, DMA, TIM4, CLK, GPIO
      Задача у программы такая:
      В EEPROM зашит один период синусоиды с дискретизацией 44100Гц. Период занимает ровно 101 байт, что по сути должно быть равно 2,29мс (1/44100*101). В коде программы только конфигурация периферии, одно прерывание на кнопке и пустой бесконечный цикл, который ничего не делает. Всю работу выполняет таймер, который настроен выдавать запрос к DMA на каждые 1/44100 (ядро тактируется 2мГц, таймер считает до 45). В свою очередь DMA забирает из EEPROM по одному байту на каждый запрос от таймера и передаёт его в DAC. Далее DAC выводит бесконечную синусоиду на ногу PF0. Прерывание на кнопке запускает весь этот механизм и зажигает светодиод.
      Проблема:
      Измеряя ногу PF0 осциллографом было замечено, что период синусоиды занимает около ≈4мс. Фото под катом.
      Меня это расстроило. Экспериментально выяснилось, что стоит только вписать в бесконечный цикл какую-нибудь проверку, например, [если значение текущего байта синусоиды = 0xFF, то зажечь светодиод, если 0x00, то потушить], то осциллограф показывает правильный тайминг в 2(с копейками)мс. В принципе в теле цикла может быть что угодно, кроме пустоты, и тайминг налаживается.
      Я не могу отдебажить дизассемблер, т.к. его не знаю. Это у меня в планах. Но я очень хочу понять, что происходит и почему пустой цикл рушит тайминг.
      Спасибо.
       
       
       
       
×
×
  • Create New...