Apтём (04.11.2014 16:17, просмотров: 138) ответил Vit на Не вижу как минимум включения тактирования SPI, DMA и GPIO, настройку пинов на AF
Это всё наличиствует - не привёл просто, ибо много букв будет.
static INLINE void EnablePeripheralClock()
{
RCC->APB2ENR|=0
| RCC_APB2ENR_TIM1EN
| RCC_APB2ENR_SPI1EN
;
RCC->APB1ENR|=0
|RCC_APB1ENR_SPI3EN
;
RCC->AHB1ENR|=RCC_AHB1ENR_DMA2EN;
}
typedef Pin<'A', 5, 'H', PIN_SPEED_100MHZ> LCLK;
typedef Pin<'A', 7, 'H', PIN_SPEED_100MHZ> LMOSI;
typedef Pin<'E', 7> LCLK_IN;
typedef Pin<'E', 9, 'H', PIN_SPEED_100MHZ> LE;
typedef Pin<'E', 11, 'L', PIN_SPEED_100MHZ> LED_CS0;
typedef Pin<'E', 12, 'L', PIN_SPEED_100MHZ> LED_CS1;
typedef Pin<'E', 13, 'L', PIN_SPEED_100MHZ> LED_CS2;
typedef Pin<'E', 14, 'L', PIN_SPEED_100MHZ> LED_CS3;
INLINE static void InitLedIO()
{
LCLK_IN::Mode(ALT_INPUT);
LCLK_IN::Alternate(ALT_FUNC_TIM1);
LCLK::Mode(ALT_OUTPUT);
LCLK::Alternate(ALT_FUNC_SPI1);
LCLK::SetSpeed(PIN_SPEED_100MHZ);
LMOSI::Mode(ALT_OUTPUT);
LMOSI::Alternate(ALT_FUNC_SPI1);
LMOSI::SetSpeed(PIN_SPEED_100MHZ);
LED_CS0::Mode(OUTPUT);
LED_CS0::SetSpeed(PIN_SPEED_100MHZ);
LED_CS0::Off();
LED_CS1::Mode(OUTPUT);
LED_CS1::SetSpeed(PIN_SPEED_100MHZ);
LED_CS1::Off();
LED_CS2::Mode(OUTPUT);
LED_CS2::SetSpeed(PIN_SPEED_100MHZ);
LED_CS2::Off();
LED_CS3::Mode(OUTPUT);
LED_CS3::SetSpeed(PIN_SPEED_100MHZ);
LED_CS3::Off();
#if (TIMER_OUTPUT_ENABLED==0)
LE::Mode(OUTPUT);
LE::Off();
#else
LE::Mode(ALT_OUTPUT);
LE::Alternate(ALT_FUNC_TIM1);
#endif
}
INLINE static void InitLedSpi()
{
SPI1->CR1=0
| SPI_CR1_DFF
| SPI_CR1_SSM
| SPI_CR1_SSI
| SPI_CR1_BR_2
| SPI_CR1_BR_1
| SPI_CR1_BR_0
| SPI_CR1_SPE
| SPI_CR1_MSTR
;
SPI1->CR2=0;
}
Если SPI1 программно запускать - то всё работает. По ДМА не получается. Где-то не так его настроил. Не могу понять где именно.