STM32CubeMX基础例程(小熊派):07.SPI驱动LCD屏幕

1、准备开发板

这里我选用了一块网红开发板:”小熊派“,这款板子的人气比较高,还是全国大学生物联网设计竞赛(华为杯)的华为竞赛开发板,我个人也比较喜欢用这款板子,这款板子在放在纸箱吃灰半年之后,被我重新拿了起来,并想借此写博客的机会,整理一下自己的代码。

开发板功能区分布图

在这里插入图片描述

开发板俯视图

在这里插入图片描述

2、STM32CubeMX生成代码

在这里插入图片描述

搜索并选择芯片型号

在这里插入图片描述

配置系统时钟

在这里插入图片描述

配置时钟树

STM32L4的最高主频可达到80M,最后使HCLK = 80Mhz即可:

在这里插入图片描述
在这里插入图片描述

配置GPIO

在这里插入图片描述

配置SPI

在这里插入图片描述
SPI2默认SCK引脚是PB10,和开发板不对应,所以重新修改引脚为PB13:

在这里插入图片描述
修改引脚的用户标签(相当于取另一个新名字)

在这里插入图片描述

生成工程设置

在这里插入图片描述

代码生成配置

在这里插入图片描述

生成代码

在这里插入图片描述

生成成功

在这里插入图片描述

3、在MDK中编写代码

添加LCD驱动到工程目录

将LCD压缩包里面的所有文件,解压到./Hardware/LCD路径里面

在这里插入图片描述
在这里插入图片描述

添加工程文件夹

在这里插入图片描述

添加头文件路径

在这里插入图片描述
在这里插入图片描述

在spi.h中编写以下代码

/* USER CODE BEGIN Prototypes */
uint8_t SPI2_WriteByte(uint8_t* data, uint16_t size);
/* USER CODE END Prototypes */

在spi.c中编写以下代码

/* USER CODE BEGIN 1 */

uint8_t SPI2_WriteByte(uint8_t* data, uint16_t size)
{
 return  HAL_SPI_Transmit(&hspi2, data, size, 0xff);
}

/* USER CODE END 1 */

在main.c中编写以下代码

/* USER CODE BEGIN Includes */
#include "lcd.h"
/* USER CODE END Includes */


int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_SPI2_Init();
  /* USER CODE BEGIN 2 */
  LCD_Init();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		
	LCD_Clear(BLACK);//清屏为黑色
	LCD_ShowString(5, 10, 240, 32, 32, "BearPi LCDTest");//显示字符串,字体大小32*32
	LCD_ShowString(10, 50, 240, 16, 16, "Welcome to IoT CluB!");//显示字符串,字体大小16*16
  	LCD_ShowString(10, 50+24, 240, 24, 24, "to IoT CluB!");//显示字符串,字体大小24*24
	LCD_ShowString(10, 50+24+32, 240, 32, 32, "IoT CluB!");//显示字符串,字体大小32*32
 	PutChinese_strings(10,150,"欢迎来到物联网俱乐部",0);	
	HAL_Delay(1000);//延时1秒
	LCD_Clear(BLUE);//清屏为蓝色
	LCD_Draw_Circle(120, 120, 100);//画圆 半径r=100
	LCD_Draw_Circle(120, 120, 80);//画圆 半径r=80
	LCD_Draw_Circle(120, 120, 60);//画圆 半径r=60
	LCD_Draw_Circle(120, 120, 40);//画圆 半径r=40
	LCD_Draw_Circle(120, 120, 20);//画圆 半径r=20
	LCD_Draw_Circle(120, 120, 1);//画圆 半径r=1
	HAL_Delay(1000);//延时1秒
  }
  /* USER CODE END 3 */
}

在这里插入图片描述

4、配置烧录器

在这里插入图片描述
在这里插入图片描述

5、烧录代码

在这里插入图片描述

6、实验现象

​ 在LCD上显示测试画面

  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
很抱歉,根据您提供的引用内容,我没有找到与CAN例程相关的信息。但是,我可以为您提供一些关于STM32CubeMX和CAN总线的基本知识和使用方法。 STM32CubeMX是一个图形化的配置工具,可用于生成STM32微控制器的初始化代码。它可以帮助您快速配置和生成代码,以便您可以专注于应用程序的开发。CAN总线是一种串行通信协议,用于在微控制器之间传输数据。它通常用于汽车电子和工业自动化等领域。 要在STM32CubeMX中配置CAN总线,您可以按照以下步骤操作: 1. 打开STM32CubeMX并创建一个新项目。 2. 选择您的STM32微控制器型号。 3. 在“Pinout & Configuration”选项卡中,配置CAN总线的引脚。 4. 在“Clock Configuration”选项卡中,配置CAN总线的时钟。 5. 在“Configuration”选项卡中,启用CAN总线并配置其参数,例如波特率和过滤器。 6. 生成代码并将其导入到您的IDE中。 以下是一些可能有用的代码片段,用于在STM32CubeMX中配置和使用CAN总线: 1. 配置CAN总线的引脚: ```c /* CAN GPIO Configuration */ GPIO_InitStruct.Pin = CAN_RX_Pin|CAN_TX_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF9_CAN1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); ``` 2. 配置CAN总线的时钟: ```c /* CAN1 clock enable */ __HAL_RCC_CAN1_CLK_ENABLE(); ``` 3. 启用CAN总线并配置其参数: ```c /* CAN1 init */ hcan1.Instance = CAN1; hcan1.Init.Prescaler = 5; hcan1.Init.Mode = CAN_MODE_NORMAL; hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ; hcan1.Init.TimeSeg1 = CAN_BS1_13TQ; hcan1.Init.TimeSeg2 = CAN_BS2_2TQ; hcan1.Init.TimeTriggeredMode = DISABLE; hcan1.Init.AutoBusOff = DISABLE; hcan1.Init.AutoWakeUp = DISABLE; hcan1.Init.AutoRetransmission = ENABLE; hcan1.Init.ReceiveFifoLocked = DISABLE; hcan1.Init.TransmitFifoPriority = DISABLE; if (HAL_CAN_Init(&hcan1) != HAL_OK) { Error_Handler(); } /* CAN filter init */ sFilterConfig.FilterBank = 0; sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; sFilterConfig.FilterIdHigh = 0x0000; sFilterConfig.FilterIdLow = 0x0000; sFilterConfig.FilterMaskIdHigh = 0x0000; sFilterConfig.FilterMaskIdLow = 0x0000; sFilterConfig.FilterFIFOAssignment = CAN_FILTER_FIFO0; sFilterConfig.FilterActivation = ENABLE; sFilterConfig.SlaveStartFilterBank = 14; if (HAL_CAN_ConfigFilter(&hcan1, &sFilterConfig) != HAL_OK) { Error_Handler(); } ``` 希望这些信息能够帮助您更好地了解STM32CubeMX和CAN总线的使用。如果您有任何其他问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值