Easyelectronics.ru

Электроника для всех
Текущее время: 01 ноя 2020, 07:01

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: STM32F4 с MAX7221 не доходят команды [решено]
СообщениеДобавлено: 12 июн 2012, 00:04 
Заглядывает иногда

Зарегистрирован: 27 фев 2012, 17:56
Сообщения: 44
пробую посылать команды с STM32F4Discovery на MAX7221. Команды 0x0f01 (включить тестовый режим) и 0x0f00 (отключить тестовый режим). Когда посылаю циклически по несколько раз одну и ту же команду MAX7221 реагирует на них. Когда по одному разу команды часто не доходят. Подскажите в чем может быть проблема

Код:
/* Includes */
#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_spi.h"

/* Private macro */
/* Private variables */
/* Private function prototypes */
/* Private functions */
void Init_SPI2(void);
void Out_Data_SPI(uint16_t SPI_Data);
void Delay(__IO uint32_t nCount);

/**
**===========================================================================
**
**  Abstract: main program
**
**===========================================================================
*/
int main(void)
{

Init_SPI2();

   int i = 0;
   Delay(50);
   Out_Data_SPI(0x0f01);

  /* Infinite loop */
  while (1)
  {
   i++;

  }
}

void Init_SPI2(void)
{
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);

GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_SPI2);
// GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_SPI2);
GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_SPI2);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);

SPI_I2S_DeInit(SPI2);
/* SPI2 Configuration ----------------------------------------------------*/
SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_Init(SPI2, &SPI_InitStructure);
SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_TXE);
SPI_Cmd(SPI2, ENABLE);

}
void Delay(__IO uint32_t nCount)
{
  for(; nCount != 0; nCount--);
}
void Out_Data_SPI(uint16_t SPI_Data)
{
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI2, SPI_Data);
}


Последний раз редактировалось Listunov 15 июн 2012, 14:50, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4 с MAX7221 не доходят команды
СообщениеДобавлено: 15 июн 2012, 12:20 
Заглядывает иногда

Зарегистрирован: 27 фев 2012, 17:56
Сообщения: 44
я уже разобрался с этим вопросом, проблема была именно в CS.
все работает.
теперь код выглядит так:

Код:
/* Includes */
#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_spi.h"

/* Private macro */
/* Private variables */
/* Private function prototypes */
/* Private functions */
void MAX7221_SPI2_Out (uint8_t segm, uint8_t data);
void MAX7221_Init(void);
void Init_SPI2(void);
void Out_Data_SPI2(uint16_t SPI_Data);
void Delay(__IO uint32_t nCount);

/**
**===========================================================================
**
**  Abstract: main program
**
**===========================================================================
*/
int main(void)
{

Init_SPI2();

MAX7221_Init();


int i = 0;
   Delay(150);

   MAX7221_SPI2_Out(0x01,0xAB);
   MAX7221_SPI2_Out(0x02,0xAB);
   MAX7221_SPI2_Out(0x03,0xAB);
   MAX7221_SPI2_Out(0x04,0xAB);
   MAX7221_SPI2_Out(0x05,0xAB);

  /* Infinite loop */
  while (1)
  {
   i++;
  }
}
void MAX7221_SPI2_Out(uint8_t segm, uint8_t data)
{
   uint16_t MAX7221Out = (uint16_t)(((uint16_t)segm << 8) | data);
   Out_Data_SPI2(MAX7221Out);
}

void MAX7221_Init(void)
{
      Out_Data_SPI2(0x0f01); // test mode ON
      Delay(9999999);
      Out_Data_SPI2(0x0f00); // test mode OFF
      Out_Data_SPI2(0x0C01); // shutdown mode ON
      Out_Data_SPI2(0x0B04); // scan limit
      Out_Data_SPI2(0x0900); // decode mode
      Out_Data_SPI2(0x0A00); // intensity

      MAX7221_SPI2_Out(0x01,0x00);
      MAX7221_SPI2_Out(0x02,0x00);
      MAX7221_SPI2_Out(0x03,0x00);
      MAX7221_SPI2_Out(0x04,0x00);
      MAX7221_SPI2_Out(0x05,0x00);
}

void Init_SPI2(void)
{
   SPI_InitTypeDef SPI_InitStructure;
   GPIO_InitTypeDef GPIO_InitStructure;

   RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);

   GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_SPI2);
   GPIO_PinAFConfig(GPIOB,GPIO_PinSource9,GPIO_AF_SPI2);
   GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_SPI2);

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_9 | GPIO_Pin_15;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOB, &GPIO_InitStructure);

   SPI_I2S_DeInit(SPI2);
   /* SPI2 Configuration ----------------------------------------------------*/
   SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
   SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
   SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
   SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
   SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
   SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
   SPI_Init(SPI2, &SPI_InitStructure);

   SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_TXE);
   SPI_SSOutputCmd(SPI2,ENABLE);
}

void Delay(__IO uint32_t nCount)
{
   for(; nCount != 0; nCount--);
}

void Out_Data_SPI2(uint16_t SPI_Data)
{
   SPI_SSOutputCmd(SPI2,DISABLE);
   SPI_Cmd(SPI2, ENABLE);
   SPI_I2S_SendData(SPI2, SPI_Data);
   SPI_SSOutputCmd(SPI2,ENABLE);
   SPI_Cmd(SPI2, DISABLE);
   Delay(70);
}


Подскажите как можно еще оптимизировать код


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB