[活动专区] 【AT-START-F407测评】五、SPI_OLED

[复制链接]
1446|0
 楼主| lisingch 发表于 2021-1-31 21:22 | 显示全部楼层 |阅读模式
本帖最后由 lisingch 于 2021-1-31 21:25 编辑

      本次实验利用开发板上的SPI1接口驱动0.91'OLED,这个OLED与前面试验所用的I2C接口OLED同样都是128*32分辨率,外形尺寸也是相当,唯一不同的只是控制接口,一个SPI一个是I2C。
一、实验资源
1、AT-START-F407开发板;
2、keil v5.31.0.0;
3、BSP等相关资源;
4、0.91'OLED(SPI)

二、相关知识学习
      AT32F407VGT7微控制器配置了4个SPI接口,可以配置为支持SPI协议或者支持I2S音频协议,默认工作在SPI方式。支持半双工、全双工、同步、串行等通信方式。支持主、从操作,支持8位或16位数据传输,支持硬件CRC等:
2021-01-31_202711.png
2021-01-31_202801.png
2021-01-31_202833.png
2021-01-31_202924.png
2021-01-31_202957.png

在使用时注意配置SPI时钟信号的相位和极性:
2021-01-31_203125.png
2021-01-31_205012.png

本次实验只是向OLED输送数据,因此只使用了SPI的主模式,片选信号使用软件控制。
2021-01-31_205130.png

三、硬件连接
      OLED模块采用拆机的OLED屏打板自制,接口排针的序列兼容了市面上常用的7针OLED显示模块接口。
OLED_SCK  ---->PA5
OLED_MOSI---->PA7
OLED_RES  ---->PA4
OLED_DC   ---->PA6
OLED_CS   ---->PA2
2021-01-30_103349.png

四、程序实现
      实现的代码是在“BSP”相关代码的基础上进行了移植和修改,OLED代码均来自于网络。
SPI配置:
  1. static void SPI1_Config(void)
  2. {
  3.         SPI_InitType  SPI_InitStructure;
  4.         /* SPI1 Config -------------------------------------------------------------*/
  5.   SPI_DefaultInitParaConfig(&SPI_InitStructure);
  6.   SPI_InitStructure.SPI_TransMode = SPI_TRANSMODE_FULLDUPLEX;
  7.   SPI_InitStructure.SPI_Mode = SPI_MODE_MASTER;
  8.   SPI_InitStructure.SPI_FrameSize = SPI_FRAMESIZE_8BIT;//
  9.   SPI_InitStructure.SPI_CPOL = SPI_CPOL_HIGH;//SPI_CPOL_LOW;//
  10.   SPI_InitStructure.SPI_CPHA = SPI_CPHA_2EDGE;
  11.   SPI_InitStructure.SPI_NSSSEL = SPI_NSSSEL_SOFT;
  12.   SPI_InitStructure.SPI_MCLKP = SPI_MCLKP_2;
  13.   SPI_InitStructure.SPI_FirstBit = SPI_FIRSTBIT_MSB;//
  14.   SPI_InitStructure.SPI_CPOLY = 0;
  15.         
  16.   SPI_Init(SPI1, &SPI_InitStructure);
  17.         
  18.         /* Enable SPI1 */
  19.   SPI_Enable(SPI1, ENABLE);
  20. }

  21. /**
  22.   * [url=home.php?mod=space&uid=247401]@brief[/url]  Configures the different system clocks.
  23.   * @param  None
  24.   * @retval None
  25.   */
  26. static void SPI1_RCC_Config(void)
  27. {
  28.   /* Enable peripheral clocks --------------------------------------------------*/
  29.   /* GPIOA SPI1 clock enable */
  30.   RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOA | RCC_APB2PERIPH_SPI1, ENABLE);
  31.                         
  32. }

  33. /**
  34.   * [url=home.php?mod=space&uid=247401]@brief[/url]  Configures the different GPIO ports.
  35.   * @param  None
  36.   * @retval None
  37.   */
  38. static void SPI1_PORT_Config(void)
  39. {
  40.   GPIO_InitType GPIO_InitStructure;

  41.   /* Configure SPI1 pins: SCK, MOSI ---------------------------------*/
  42.   /* Confugure SCK and MOSI pins as Alternate Function Push Pull */
  43.   GPIO_InitStructure.GPIO_Pins = GPIO_Pins_5 | GPIO_Pins_7;
  44.   GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz;
  45.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  46.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  47. }

  48. void SPI1_Init(void)
  49. {
  50.         SPI1_PORT_Config();
  51.         SPI1_RCC_Config();
  52.         SPI1_Config();
  53. }

OLED“写”代码:
  1. void OLED_WR_Byte(uint8_t dat,uint8_t cmd)
  2. {
  3.     if(cmd) OLED_DC_Set();
  4.     else    OLED_DC_Clr();

  5.                 /* Check Transmit buffer empty flag */
  6.                 while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TE) == RESET);
  7.                 SPI_I2S_TxData(SPI1, dat);
  8. }

主函数:
  1. int main(void)
  2. {
  3.   AT32_Board_Init();
  4.         SPI1_Init();
  5.         OLED_Init();

  6.         OLED_Clear();
  7.    
  8.         OLED_ShowCHinese(0,0,0);//雅
  9.         OLED_ShowCHinese(16,0,1);//特
  10.         OLED_ShowCHinese(32,0,2);//力
  11.         OLED_ShowCHinese(48,0,3);//科
  12.         OLED_ShowCHinese(64,0,4);//技
  13.        
  14.         OLED_ShowString(24,2,"AT-START-F407");

  15.   while(1)
  16.   {

  17.   }
  18. }

五、实验结果
微信图片_20210131102526.jpg
微信图片_20210131102531.jpg
微信图片_20210131102544.jpg

六、总结
      通过本次实验对AT32F407VGT7的SPI主模式“写”操作的应用进行了初步的认识,实验的成功为后期更深入地学习奠定了基础。

七、附件
SPI_oled.rar (6.43 MB, 下载次数: 21)


您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

15005

帖子

19

粉丝
快速回复 在线客服 返回列表 返回顶部