Привет всем.
Раньше как тоигрался с ардуино, а теперь вот решил немного освоить STM32.
Чип у меня STM32F103C8T6. Работать пытаюсь в COOCOX. Знаю что не лучшая система, но Кейл не осилил пока.
Проблема такая:
Создал новый проект. добавил SPI. Автоматом добавились GPIO, RCC и CMSIS.
Почитав много всего в сети, написал такую прогу.
Код:
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_spi.h"
int main(void)
{
//************************************************************************************
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_ADCCLKConfig(RCC_PCLK2_Div4);
RCC_PLLConfig(0x00010000, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08)
{
}
//************************************************************************************
SPI_InitTypeDef SPI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_13 | GPIO_Pin_15);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
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_2;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_Init(SPI2, &SPI_InitStructure);
SPI_CalculateCRC(SPI2, DISABLE);
SPI_Cmd(SPI2, ENABLE);
//************************************************************************************
while(1)
{
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) { ; }
SPI_I2S_SendData(SPI2, 0x00);
}
}
По сути циклически отправляет в SPI код "0".
Теоретически ожидалось что байты будут передаваться подряд без промежутков. Ну или с минимальным промежутком в 1 бит. Но на деле получилось что между байтами промежуток еще в пару байт. Соответственно в несколько раз падает скорость SPI.
Вложение:
IMG_20170310_101111.jpg [34.81 KiB]
Скачиваний: 458
Подозреваю что где то не правильно настроил модуль SPI, но не могу понять где.
Буду рад подсказкам.