[活动专区] 【N32G430开发板试用】+液晶屏点亮显示温湿度(硬件SPI)

[复制链接]
1040|8
 楼主| wuxiubo 发表于 2022-8-14 19:04 | 显示全部楼层 |阅读模式
上次我们添加了软件SPI点亮我们的TFT液晶屏,今天我们测试下我们的硬件SPI完成我们的屏幕点亮,中间也遇到些问题,也参考了下网友分享的解决方案。
  1. #define hardware_spi 0

  2. #define software_spi 1



  3. #define LCD_SPI   hardware_spi



  4. void LCD_GPIO_Init(void)

  5. {

  6.        GPIO_InitType GPIO_InitStructure;

  7.       

  8.       RCC_AHB_Peripheral_Clock_Enable(RCC_AHB_PERIPH_GPIOA);    //使能A端口时钟

  9.       

  10.        GPIO_Structure_Initialize(&GPIO_InitStructure);

  11. #if LCD_SPI==software_spi

  12.        /* Select the GPIO pin to control */

  13.        GPIO_InitStructure.Pin          = GPIO_PIN_5|GPIO_PIN_7|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4;

  14.        /* Set pin mode to general push-pull output */

  15.        GPIO_InitStructure.GPIO_Mode    = GPIO_MODE_OUT_PP;

  16.        /* Set the pin drive current to 4MA*/

  17.        GPIO_InitStructure.GPIO_Current = GPIO_DS_4MA;

  18.        /* Initialize GPIO */

  19.        GPIO_Peripheral_Initialize(GPIOA, &GPIO_InitStructure);



  20.        GPIO_Pins_Set(GPIOA,GPIO_PIN_5|GPIO_PIN_7|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4);

  21.       

  22. #elif LCD_SPI==hardware_spi

  23.       



  24.        SPI_InitType SPI_InitStructure;



  25.     GPIO_Structure_Initialize(&GPIO_InitStructure);

  26.       

  27.        RCC_APB2_Peripheral_Clock_Enable(RCC_APB2_PERIPH_SPI1);

  28.     /* Configure master pins: NSS, SCK, MISO and MOSI */

  29.     /* Confugure SPI pins as Alternate Function Push Pull */

  30.     GPIO_InitStructure.Pin        = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;

  31.     GPIO_InitStructure.GPIO_Mode  = GPIO_MODE_AF_PP;

  32.     GPIO_InitStructure.GPIO_Slew_Rate = GPIO_SLEW_RATE_FAST;

  33.     GPIO_InitStructure.GPIO_Alternate = GPIO_AF1_SPI1;

  34.     GPIO_Peripheral_Initialize(GPIOA, &GPIO_InitStructure);

  35.       

  36.        GPIO_InitStructure.Pin          = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4;

  37.        /* Set pin mode to general push-pull output */

  38.        GPIO_InitStructure.GPIO_Mode    = GPIO_MODE_OUT_PP;

  39.        /* Set the pin drive current to 4MA*/

  40.        GPIO_InitStructure.GPIO_Current = GPIO_DS_4MA;

  41.        /* Initialize GPIO */

  42.        GPIO_Peripheral_Initialize(GPIOA, &GPIO_InitStructure);



  43.        GPIO_Pins_Set(GPIOA,GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4);

  44.       

  45. //     SPI_I2S_Reset(SPI1);

  46.        /* SPI_MASTER configuration ------------------------------------------------------*/

  47.     SPI_Initializes_Structure(&SPI_InitStructure);

  48.     SPI_InitStructure.DataDirection = SPI_DIR_DOUBLELINE_FULLDUPLEX;

  49.     SPI_InitStructure.SpiMode       = SPI_MODE_MASTER;

  50.     SPI_InitStructure.DataLen       = SPI_DATA_SIZE_8BITS;

  51.     SPI_InitStructure.CLKPOL        = SPI_CLKPOL_HIGH;

  52.     SPI_InitStructure.CLKPHA        = SPI_CLKPHA_SECOND_EDGE;

  53.     SPI_InitStructure.NSS           = SPI_NSS_SOFT;

  54.     /* It is recommended that the SPI master mode of the C version chips should not exceed 18MHz */

  55.     SPI_InitStructure.BaudRatePres  = SPI_BR_PRESCALER_2;

  56.     SPI_InitStructure.FirstBit      = SPI_FB_MSB;

  57.     SPI_InitStructure.CRCPoly       = 7;

  58.     SPI_Initializes(SPI1, &SPI_InitStructure);

  59.       

  60.        SPI_Set_Nss_Level(SPI1, SPI_NSS_HIGH);



  61.        /* Enable SPI_MASTER */

  62.     SPI_ON(SPI1);

  63.       

  64. #endif

  65. }





  66. /******************************************************************************

  67.       函数说明:LCD串行数据写入函数

  68.       入口数据:dat  要写入的串行数据

  69.       返回值:  无

  70. ******************************************************************************/

  71. void LCD_Writ_Bus(u8 dat)

  72. {     

  73. #if LCD_SPI==software_spi

  74.        u8 i;

  75.        for(i=0;i<8;i++)

  76.        {                     

  77.               LCD_SCLK_Clr();

  78.               if(dat&0x80)

  79.               {

  80.                  LCD_MOSI_Set();

  81.               }

  82.               else

  83.               {

  84.                  LCD_MOSI_Clr();

  85.               }

  86.               LCD_SCLK_Set();

  87.               dat<<=1;

  88.        }     

  89. #elif LCD_SPI==hardware_spi

  90.               while(SPI_I2S_Flag_Status_Get(SPI1, SPI_I2S_FLAG_TE) == RESET);

  91.               SPI_I2S_Data_Transmit(SPI1,dat);

  92.               while (SPI_I2S_Flag_Status_Get(SPI1, SPI_I2S_FLAG_RNE) == RESET);

  93.               SPI_I2S_Data_Get(SPI1);

  94. #endif

  95. }


看下代码就是上面的,初始化IO和发送函数里面我们添加了区分,其余地方软件和硬件SPI都一样。
原本我只使用发送的,结果屏幕就是没有亮,加上读取SPI数据后就能点亮了,应该就这块要注意下。
  1.               SHT20_GetValue();

  2.             

  3.               LCD_ShowChinese(0,0,"国民技术",RED,WHITE,32,0);

  4.       

  5.               //温湿度显示

  6.               LCD_ShowString(0,60,"TEMP:",BLACK,WHITE,24,0);

  7.               LCD_ShowFloatNum1(100,60,sht20Info.tempreture,4,BLACK,WHITE,24);

  8.               LCD_ShowString(150,60,"C",BLACK,WHITE,24,0);



  9.               LCD_ShowString(0,90,"HUMI:",BLACK,WHITE,24,0);

  10.               LCD_ShowFloatNum1(100,90,sht20Info.humidity,4,BLACK,WHITE,24);

  11.               LCD_ShowString(150,90,"%",BLACK,WHITE,24,0);   


然后我们加如温湿度显示数据,这样屏幕上就能获取到我们温湿度传感器数据然后显示出来了。非常的直观。
下面看下硬件接线。
图片1.jpg
图片2.jpg
后续我们也可以制作中文字体替换。

wengh2016 发表于 2022-8-17 15:51 | 显示全部楼层
感觉硬件iic和spi好复杂。   
usysm 发表于 2022-8-18 17:30 | 显示全部楼层
硬件spi好用吗   
xietingfeng 发表于 2022-8-18 19:05 | 显示全部楼层
oled实现的吗   
 楼主| wuxiubo 发表于 2022-8-19 08:48 | 显示全部楼层
wengh2016 发表于 2022-8-17 15:51
感觉硬件iic和spi好复杂。

其实硬件SPI来说,大家都是大差不差的,主要是硬件IIC,硬件IIC是每家可能给的库都不一样,包括STM32的HAL和标准库也不一样,目前国内的硬件IIC看到多数没有STM32HAL库那样精简的,一般都是要配启动,发送地址这些东西,需要一个逻辑分析仪进行调试,会方便很多。
 楼主| wuxiubo 发表于 2022-8-19 08:48 | 显示全部楼层

SPI TFT液晶,其实就是驱动液晶里面的一个芯片
 楼主| wuxiubo 发表于 2022-8-19 08:49 | 显示全部楼层

硬件SPI基本上没啥大问题的,主要就是为了速度,不然大可不必
1213132123 发表于 2022-9-14 19:26 | 显示全部楼层
没有源程序?
1213132123 发表于 2022-9-16 13:44 | 显示全部楼层
能贴出工程文件?你这是一堆错误
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

259

帖子

2

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