本帖最后由 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
}
|