Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 26.09.2014, 12:36  
wastegate
Прохожий
 
Регистрация: 23.09.2014
Сообщений: 2
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
wastegate на пути к лучшему
Вопрос STM32F107VC + MAX7219

Всем добрый день.
купил на днях драйвер семисегментных индикаторов и светодиодных матриц MAX7219 неделю с ним промучился так и не могу привести его в чувства. Семисегментные индикаторы просто светятся все разряды или начинают моргать и загораются хаотичные сегменты. Я уже перепробывал все варианты настройки SPI и самой MAX7219.
вот мои настройки.
Код:
#include "stm32f10x.h"

#define CS_ON()			    GPIO_ResetBits(GPIOC, GPIO_Pin_0)
#define CS_OFF()				GPIO_SetBits(GPIOC, GPIO_Pin_0)

uint8_t count = 0;   //вывод числа на индикатор

void SPI_Ini (void)		//функция настройки SPI1
{
	SPI_InitTypeDef SPI_Init_Seg;
	GPIO_InitTypeDef GPIO_Init_SPI;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_Init_SPI.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;  //настройка MISO,MOSI,SCK
	GPIO_Init_SPI.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_Init_SPI.GPIO_Speed = GPIO_Speed_50MHz;
	
	//РC.10 - SCK
	//PC.11 - MISO
	//PC.12 - MOSI
	//PC.3  - CS
	
	GPIO_Init(GPIOC, &GPIO_Init_SPI);
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//настройка чип селект
	
	GPIO_Init_SPI.GPIO_Pin = GPIO_Pin_3;
	GPIO_Init_SPI.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init_SPI.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOC, &GPIO_Init_SPI);
	
	CS_OFF();		//выставляем чип селект в 1
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);
	
	SPI_Init_Seg.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
	SPI_Init_Seg.SPI_Mode = SPI_Mode_Master;
	SPI_Init_Seg.SPI_DataSize = SPI_DataSize_16b;
	SPI_Init_Seg.SPI_CPOL = SPI_CPOL_Low;
	SPI_Init_Seg.SPI_CPHA = SPI_CPHA_1Edge;
	SPI_Init_Seg.SPI_NSS = SPI_NSS_Soft;
	SPI_Init_Seg.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
	SPI_Init_Seg.SPI_FirstBit = SPI_FirstBit_MSB;
	SPI_Init_Seg.SPI_CRCPolynomial = 7;
	
	SPI_Init(SPI3, &SPI_Init_Seg);
	
	SPI_Cmd(SPI3, ENABLE);
}
////////////////////////////////
////////////////////////////////
void max7219_init1(void) 
{

  CS_ON();          				//устанавливаем чип селект в 0						 
  SPI_I2S_SendData(SPI3, 0x09);		//отправляем первый пакет данных и указываем адрес режим декодирования	 		 
	if(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == SET)//по установки конца передачи при установке флага попадаем сюда (при отладке заходит)
	{
		SPI_I2S_ClearFlag(SPI3, SPI_I2S_FLAG_TXE);//сбрасываем флаг
	}
  SPI_I2S_SendData(SPI3, 0xFF);    //отправляю второй пакет и настраиваю декодирование на всех индикаторах
	if(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == SET)
	{
		SPI_I2S_ClearFlag(SPI3, SPI_I2S_FLAG_TXE);
	}
  CS_OFF();          	//чип селект поднимаю в 1									 

  CS_ON();        		//чип селект в 0		 						  
  SPI_I2S_SendData(SPI3, 0x0A);    //настраиваем интенсивность свечения
	if(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == SET)
	{
		SPI_I2S_ClearFlag(SPI3, SPI_I2S_FLAG_TXE);
	}
  SPI_I2S_SendData(SPI3, 0x07);          //указываем интенсивность свечения (примерно ярко)
	if(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == SET)
	{
		SPI_I2S_ClearFlag(SPI3, SPI_I2S_FLAG_TXE);
	}
  CS_OFF();          		//чип селект в 1		 						 

  CS_ON();				//чип селект в 0    						      
  SPI_I2S_SendData(SPI3, 0x0B);     //адрес регистра отвечающего за количество работающих индикаторов
	if(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == SET)
	{
		SPI_I2S_ClearFlag(SPI3, SPI_I2S_FLAG_TXE);
	}
  SPI_I2S_SendData(SPI3, 0x07);          // выбираем все регистры
	if(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == SET)
	{
		SPI_I2S_ClearFlag(SPI3, SPI_I2S_FLAG_TXE);
	}
  CS_OFF();		//чип селект в 1		  						        

  CS_ON();			//чип селект в 0	  						         
  SPI_I2S_SendData(SPI3, 0x0C);    //адрес регистра режима сна
	if(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == SET)
	{
		SPI_I2S_ClearFlag(SPI3, SPI_I2S_FLAG_TXE);
	}
  SPI_I2S_SendData(SPI3, 0x01);          // выводим из сна
	if(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == SET)
	{
		SPI_I2S_ClearFlag(SPI3, SPI_I2S_FLAG_TXE);
	}
  CS_OFF();		//чип селект в 1		   						         

  CS_ON();			// чип селект в 0	     						     
  SPI_I2S_SendData(SPI3, 0x0F);    // адрес регистра "тест"
	if(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == SET)
	{
		SPI_I2S_ClearFlag(SPI3, SPI_I2S_FLAG_TXE);
	}
  SPI_I2S_SendData(SPI3, 0x00);          // режим тест выключен
	if(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == SET)
	{
		SPI_I2S_ClearFlag(SPI3, SPI_I2S_FLAG_TXE);
	}
  CS_OFF();			//чип селект в 1	 						           
}
//////////////////////////////////////
//////////////////////////////////////
int main (void)
{
SPI_Ini();
max7219_init1();

while(1)
{
   for(count = 0;count›9;count++)  //вывод на индикатор 1
     {
        SPI_I2S_SendData(SPI3, 0x01);
        if(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == SET)
	{
		SPI_I2S_ClearFlag(SPI3, SPI_I2S_FLAG_TXE);
	}
        SPI_I2S_SendData(SPI3, count);
     }
}
}
не пойму в чем проблема в настройках SPI или в настройке драйвера, что я не так делаю?
помогите примером или дельным советом.
только начал изучать stm32 еще многое не понятно.
Реклама:
wastegate вне форума  
Непрочитано 26.09.2014, 13:12  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: STM32F107VC + MAX7219

Ловите рабочий пример
Вложения:
Тип файла: rar STM32Discovery_MAX7219.rar (1.39 Мб, 126 просмотров)
Easyrider83 вне форума  
Сказали "Спасибо" Easyrider83
wastegate (26.09.2014)
Непрочитано 26.09.2014, 13:45  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: STM32F107VC + MAX7219

ИМХО это уже извращение, что по стоимости, что по смыслу!
STM32F0 вне форума  
Непрочитано 26.09.2014, 13:48  
Yurkin2014
Заблокирован
 
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
Yurkin2014 на пути к лучшему
По умолчанию Re: STM32F107VC + MAX7219

Для MAX7219 нужно посылать 2 байтовое число. У Вас SPI как раз и посылает 16-битные данные за раз. Поэтому надо сразу посылать адрес регистра и данные в одной посылке. Например, установка свечения
SPI_I2S_SendData(SPI3, 0x0A07);
Если же хотите посылать отдельными байтами, используя две команды SPI_I2S_SendData, то настройте SPI на 8-ми битные посылки
SPI_Init_Seg.SPI_DataSize = SPI_DataSize_8b;

Последний раз редактировалось Yurkin2014; 26.09.2014 в 13:51.
Yurkin2014 вне форума  
Непрочитано 26.09.2014, 14:35  
wastegate
Прохожий
 
Регистрация: 23.09.2014
Сообщений: 2
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
wastegate на пути к лучшему
По умолчанию Re: STM32F107VC + MAX7219

спасибо за пример. Открыл его ни чего не понятно,но спасибо буду сидеть разбираться.
wastegate вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Proteus общие вопросы dosikus Proteus 3366 06.09.2024 08:25
Помогите с MAX7219 igor33 TTL и CMOS логика 32 12.09.2016 15:41
DS18B20 MAX7219 PIC16F630 Кайрат PIC 3 30.07.2014 10:57
Таймеры (Basic, Advanced, General purpose, IWDG, WWDG) для STM32F107VC и ему подобных:) dmitriycor Микроконтроллеры, АЦП, память и т.д 7 23.05.2011 15:54
Вопрос по atmega8 + spi + max7219 atsys Микроконтроллеры, АЦП, память и т.д 6 16.09.2010 14:01


Часовой пояс GMT +4, время: 06:37.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot