lising 发表于 2022-2-9 20:02

【GD32L233C-START评测】六、SPI(硬件SPI驱动OLED)

<p>&nbsp; &nbsp; &nbsp; &nbsp; 新年快乐、开工大吉!</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp; 本次实验使用GD32L233CCT6的SPI通信接口驱动1.3&#39; OLED显示屏。<br />
一、实验资源<br />
1、GD32L233C-START;<br />
2、Keil V5.36.0.0;<br />
3、1.3&#39; OLED模块(自制)</p>

<p><br />
二、知识准备</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp; GD32L233CCT6有两个SPI通信接口(SPI0、SPI1),SPI接口支持具有硬件CRC计算和校验的全双工和单工模式、可以工作于主机或从机模式,其中只有SPI0支持SPI四线主机模式。&nbsp;</p>

<p></p>

<p>SPI应用中要注意在空闲状态下的时钟信号电平以及数据采样位置的配置,这些参数要结合被操作设备的具体要求进行确定。</p>

<p></p>

<p>三、实验内容</p>

<p>1、硬件连接</p>

<p>根据GD32L233C-START开发板已引出的端口情况及方便连接OLED模块,选择使用了SPI1模块。</p>

<p>&nbsp;</p>

<p>2、程序实现</p>

<p>实验中用到的OLED模块主控使用的是&ldquo;SH1106&rdquo;,</p>

<p></p>

<pre>
<code>static void spi_config(void)
{
#ifdef SPI_HARDWARE
        spi_parameter_structspi_init_struct;
       
        rcu_periph_clock_enable(RCU_GPIOB);
        rcu_periph_clock_enable(RCU_SPI1);

        spi_i2s_deinit(SPI1);
        spi_struct_para_init(&amp;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, &amp;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
}
</code></pre>

<p>程序兼容软件及硬件工作方式,SPI被配置为主机发送,仅向OLED发送数据。</p>

<p>&nbsp;</p>

<p>3、实验结果</p>

<p></p>

<p>四、附件</p>

<p>附件为本次实验的完整工程,支持软件及硬件SPI。</p>

<p>**** Hidden Message *****</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

chrisrh 发表于 2022-2-18 15:39

<p><img height="73" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan42.gif" width="82" /></p>

kukawho 发表于 2022-3-21 19:28

<p>不错</p>

hsp398083597 发表于 2022-5-23 11:42

<p>是完整的SPI控制程序吗?</p>

szpttboy 发表于 2022-6-4 13:20

<p>要顶一下</p>

青年123 发表于 2022-8-24 16:08

<p>不错</p>

Janision 发表于 2022-9-6 15:01

<p>学习一下</p>

Honghuzaitian 发表于 2022-9-10 00:15

学习了,其他芯片也可以移植一下。

aggwg 发表于 2022-9-17 15:08

<p>11111</p>

freebsder 发表于 2022-9-21 20:23

<p>谢谢分享,期待后续。</p>

是丫丫呀 发表于 2022-11-3 16:42

<p>学习一下</p>

<p>&nbsp;</p>

leafer 发表于 2022-11-24 14:10

学习下

Celtic_yu 发表于 2022-11-29 16:02

<p>学习一下</p>

gzkenny 发表于 2022-12-1 20:42

哈哈,好主意,谢谢大佬的肯定,好好好好好

点击完成 发表于 2022-12-14 18:06

1234

点击完成 发表于 2022-12-15 09:05

1234

Angle145 发表于 2023-1-7 00:40

<p>谢谢,试试看</p>

wqdqwdq 发表于 2023-5-13 15:44

<p>不错</p>

lkh747566933 发表于 2023-6-29 00:54

很不错的资料,值得学习。赞一个。谢谢楼主分享!!

Johnny1 发表于 2023-7-6 08:58

<p>学习学习</p>
页: [1] 2
查看完整版本: 【GD32L233C-START评测】六、SPI(硬件SPI驱动OLED)