Перейти к содержанию
    

GD32F207 проблема с SPI1

Пытаюсь запустить обмен по SPI1 (если считать от 0, как в документации на MCU) с Flash (25-й). 

Вот мой код:

Сначала настройка GPIO:

#define FLASH_SCK_Pin GPIO_PIN_3
#define FLASH_SCK_GPIO_Port GPIOD
#define FLASH_CS_Pin GPIO_PIN_4
#define FLASH_CS_GPIO_Port GPIOD
#define FLASH_MISO_Pin GPIO_PIN_14
#define FLASH_MISO_GPIO_Port GPIOB
#define FLASH_MOSI_Pin GPIO_PIN_15
#define FLASH_MOSI_GPIO_Port GPIOB
#define FLASH_MOSI_MISO_GPIO_Port GPIOB

GPIO_InitPara  GPIO_InitStructure;
    
    GPIO_InitStructure.GPIO_Pin = FLASH_MISO_Pin |FLASH_MOSI_Pin; 
    GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
    GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP;
    GPIO_Init(FLASH_MOSI_MISO_GPIO_Port, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = FLASH_SCK_Pin; 
    GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
    GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP;
    GPIO_Init(FLASH_SCK_GPIO_Port, &GPIO_InitStructure);
    
    uint32_t alt_func_spi2_sck = 0x00000001<<23;  //SPI2_SCK remapped to PD3
    GPIO_PinRemapConfig2(PCFR5, alt_func_spi2_sck, ENABLE); //!!!!
    
    GPIO_InitStructure.GPIO_Pin = FLASH_CS_Pin;
    GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
    GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT_PP;

GPIO_Init(FLASH_CS_GPIO_Port, &GPIO_InitStructure);
    
    SPI_FLASH_CS_HIGH();

затем настройка SPI:

  SPI_InitPara  SPI_InitStructure;
    SPI_InitStructure.SPI_TransType = SPI_TRANSTYPE_FULLDUPLEX;
    SPI_InitStructure.SPI_Mode = SPI_MODE_MASTER;
    SPI_InitStructure.SPI_FrameFormat = SPI_FRAMEFORMAT_8BIT;
    SPI_InitStructure.SPI_SCKPL = SPI_SCKPL_LOW;
    SPI_InitStructure.SPI_SCKPH = SPI_SCKPH_1EDGE;
    SPI_InitStructure.SPI_SWNSSEN = SPI_SWNSS_SOFT;
    SPI_InitStructure.SPI_PSC = SPI_PSC_32;
    SPI_InitStructure.SPI_FirstBit = SPI_FIRSTBIT_MSB;
    SPI_InitStructure.SPI_CRCPOL = 7;
    QSPI_IO34DRV(SPI2,DISABLE);
    SPI_Init(SPI2, &SPI_InitStructure);
    SPI_Enable(SPI2, ENABLE);

(здесь SPI2 - потому что нумерация SPI в примерах GD ведется с 1)

При просмотре SFR в дебаггере вижу, что функции SPI_Init и SPI_Enable  не приводят к установке 

нужных битов в регистрах МК. В том числе бита SPIEN. В чем проблема, никто не сталкивался?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А у вас включено тактирование SPI?

Изменено пользователем Sverchok

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, включено, перед указанными настройками выполняю настройку тактирования всей нужной периферии, в т.ч. SPI2:

void RCC_Configuration(void)
{
 
    RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOA , ENABLE);
    RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOB , ENABLE);
    RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOC , ENABLE);
    RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOD , ENABLE);
    RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOE , ENABLE);
    RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_AF  , ENABLE);
  
    /* Enable PWR and BKP clocks - from RTC module*/
    RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_PWR | RCC_APB1PERIPH_BKP, ENABLE); 
    /* Enable USART2 APB clock */
    RCC_APB2PeriphClock_Enable(RCC_APB1PERIPH_USART2, ENABLE);
    RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_CAN1, ENABLE);
    RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_SPI1, ENABLE);    
    RCC_APB2PeriphClock_Enable(RCC_APB1PERIPH_SPI2, ENABLE);
    
    RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_TIMER2, ENABLE); ///From USB module???
}
 

Кроме того, если пытаться настроить SPI0 (или SPI1 по коду) аналогичным образом, все настройки производятся!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, al_sv сказал:

RCC_APB2PeriphClock_Enable(RCC_APB1PERIPH_SPI2, ENABLE);

Такой же косяк и с USART2. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 hours ago, Anxigeros said:

Такой же косяк и с USART2. 

Спасибо, понял

 

image.png

Изменено пользователем al_sv

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...