- Главная
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- STM32F4 с MAX7221 не доходят команды по SPI
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- STM32F4 с MAX7221 не доходят команды по SPI
STM32F4 с MAX7221 не доходят команды по SPI
- Mikk
- Автор темы
- Посетитель
12 года 5 мес. назад #3005
от Mikk
Mikk создал тему: STM32F4 с MAX7221 не доходят команды по SPI
робую посылать команды с 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);
}
- Rustam
- Посетитель
12 года 5 мес. назад #3019
от Rustam
Rustam ответил в теме Re: STM32F4 с MAX7221 не доходят команды по SPI
А вход CS "дёргаете"?
- Mikk
- Автор темы
- Посетитель
12 года 5 мес. назад #3022
от Mikk
Mikk ответил в теме Re: STM32F4 с MAX7221 не доходят команды по SPI
я уже разобрался с этим вопросом, проблема была именно в 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);
}
Подскажите как можно еще оптимизировать код
- newseltek
- Посетитель
12 года 5 мес. назад #3027
от newseltek
newseltek ответил в теме Re: STM32F4 с MAX7221 не доходят команды по SPI
У меня со SPI2 на 103-м тоже сплошные проблемы-уже мозги выкипели ,а SPI1 работает хорошо.
Попробуй на SPI1.
Попробуй на SPI1.
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- STM32F4 с MAX7221 не доходят команды по SPI
Время создания страницы: 0.035 секунд