【GD32L233C-START评测】六、SPI(硬件SPI驱动OLED)
[复制链接]
新年快乐、开工大吉!
本次实验使用GD32L233CCT6的SPI通信接口驱动1.3' OLED显示屏。
一、实验资源
1、GD32L233C-START;
2、Keil V5.36.0.0;
3、1.3' OLED模块(自制)
二、知识准备
GD32L233CCT6有两个SPI通信接口(SPI0、SPI1),SPI接口支持具有硬件CRC计算和校验的全双工和单工模式、可以工作于主机或从机模式,其中只有SPI0支持SPI四线主机模式。
SPI应用中要注意在空闲状态下的时钟信号电平以及数据采样位置的配置,这些参数要结合被操作设备的具体要求进行确定。
三、实验内容
1、硬件连接
根据GD32L233C-START开发板已引出的端口情况及方便连接OLED模块,选择使用了SPI1模块。
2、程序实现
实验中用到的OLED模块主控使用的是“SH1106”,
static void spi_config(void)
{
#ifdef SPI_HARDWARE
spi_parameter_struct spi_init_struct;
rcu_periph_clock_enable(RCU_GPIOB);
rcu_periph_clock_enable(RCU_SPI1);
spi_i2s_deinit(SPI1);
spi_struct_para_init(&spi_init_struct);
/* 配置OLED引脚: CS/PB10; DC/PB11; RES/PB14 */
gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_10 | GPIO_PIN_11| GPIO_PIN_14);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10 | GPIO_PIN_11| GPIO_PIN_14);
/* 配置SPI1 SCK/PB13; MOSI/PB15 */
gpio_af_set(GPIOB, GPIO_AF_6, GPIO_PIN_13 | GPIO_PIN_15);
gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_13 | GPIO_PIN_15);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13 | GPIO_PIN_15);
spi_init_struct.trans_mode = SPI_TRANSMODE_BDTRANSMIT;
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; //CKPL=0;CKPH=1
//spi_init_struct.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE;
spi_init_struct.nss = SPI_NSS_SOFT;
spi_init_struct.prescale = SPI_PSC_8 ;
spi_init_struct.endian = SPI_ENDIAN_MSB;
spi_init(SPI1, &spi_init_struct);
spi_enable(SPI1);
#else
rcu_periph_clock_enable(RCU_GPIOB);
gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, OLED_PORT_IS);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, OLED_PORT_IS);
#endif
}
程序兼容软件及硬件工作方式,SPI被配置为主机发送,仅向OLED发送数据。
3、实验结果
四、附件
附件为本次实验的完整工程,支持软件及硬件SPI。
|