STM32 的SPI 应用之LCD 开始本来先玩串口,虽然程序已经跑通,但是由于网上类似文章很多,就先来个SPI玩玩,与上次GPIO 一样,技术含量仍然不高,仅是业余学习玩玩。 1、 首先来开硬件电路,个人觉得是编写程序的第 2 步;第 1 步当然是先看 STM32 的手册了,SPI 的详细介绍见 STM32 的中文使用手册。 这个电路的正确性是以我把它点亮为依据的,不是我设计的,我也不会,但是我驱动它关心的是那几个信号引脚怎么接的。这里采用的是SPI 口,加上几根控制线。关于SPI 口的介绍不大清楚的朋友可以查下相关资料,一般具有 SPI 接口的处理器的手册都有比较详细的介绍。 结合 STM32 的手册对引脚的描述: 可以看出,SPI1 的4 根引脚 MISO、MOSI、SCK(CLK)、CSN(CS)分别对应的引脚为 GPIO 的:PA6、PA7、PA5、PA4。 所以 LCD 的控制线与处理器的GPIO 具体对应如下: LCD_RST--------------PC7 LCD_RS------------------PC8 LCD_CLK-----------------------PA5 LCD_SDO-----------------------PA7 LCD_CS----------------------PA8 LCD_PWR----------------PC1 其实也就这六根信号线就能驱动LCD 了。 2、这里必须关心的是 SPI 口对应的 4 根线,这里只用到了两根MOSI(PA7)、CLK(PA5),片选 CSN 用的是通用 IO 口 PA8 代替,至于 MISO 这里可以不用使用。 所以在初始化 SPI 口是有如下程序: void SetupSPI(void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; /*允许 SPI1 和 GPIOA 时钟,这两个外设都是挂在 APB2 总线上的 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_GPIOA, ENABLE); /*配置 SPI1 引脚,由于这里只用到了 SCK,和 MOSI ,所以只对 PA5 和 PA7 进行了初始化*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;// 关于这个参数的描述可以见 GPIO 的 H 文件 GPIO_Init(GPIOA, &GPIO_InitStructure); /* 配置 PA.4 作为推挽输出,因为这里用来作为 SPI 口的片选,既选中 LCD 操作 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;...