本帖最后由 tealer 于 2022-4-13 14:51 编辑
如题,按照gd官方的例程,spi mosi发送的数据是正确的,但是sck时钟信号在发送和空闲时都一直为高,下面是代码
- void spi_config(void)
- {
- spi_parameter_struct spi_init_struct;
- /* SPI0 parameter config */
- spi_init_struct.trans_mode = SPI_TRANSMODE_FULLDUPLEX;
- spi_init_struct.device_mode = SPI_MASTER;
- spi_init_struct.frame_size = SPI_FRAMESIZE_8BIT;
- spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE; // spi mode 0
- spi_init_struct.nss = SPI_NSS_SOFT;
- spi_init_struct.prescale = SPI_PSC_256;
- spi_init_struct.endian = SPI_ENDIAN_MSB;
-
- spi_init(SPI0, &spi_init_struct);
- }
- void spi_gpio_config(void)
- {
- /* SPI0 GPIO config:SCK/PA5, MISO/PA6, MOSI/PA7 */
- gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_7);
- gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
- /* PA4 as NSS */
- gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4);
-
- }
- void spi_clock_config(void)
- {
- rcu_deinit();
- rcu_periph_clock_enable(RCU_GPIOA);
- rcu_periph_clock_enable(SPI0);
- rcu_periph_clock_enable(RCU_AF);
- }
- void gpioTask2(void* args)
- {
- spi_clock_config();
- spi_gpio_config();
- spi_config();
-
- gpio_bit_set(GPIOA, GPIO_PIN_4); // nss high
-
- // spi enable
- spi_enable(SPI0);
-
- gpio_bit_reset(GPIOA, GPIO_PIN_4); // nss low
- // 任务2
- while(1)
- {
- /* clock freq 120mhz
- * AHB freq 120mhz
- * APB1 Freq 60mhz
- * APB2 freq 120mhz
- */
- while(spi_i2s_flag_get(SPI0, SPI_FLAG_TBE) == RESET); // write
- spi_i2s_data_transmit(SPI0, (uint8_t)0x01);
-
- }
- gpio_bit_set(GPIOA, GPIO_PIN_4); // nss high
- }
|