蓝桥杯物联网赛项的主控芯片是STM32L071KBU,这块板子外设不多,入门很快。赛项支持CubeMax进行初始化配置,搭配keil5进行编译,做出美味的程序。作为点灯工程师,我们先来点亮板子上的LD5。以此来熟悉CubeMax的配置和代码的编写。
在官方给的资料中,我们可以查阅到,用户自定义LED和KEY对应的引脚是PC15,PC14。
当然也可以根据原理图来看对应的引脚配置
指示灯 LD5
按键 S1
由此我们就可以对PC14,PC15进行配置。
1.打开CubeMax新建工程
选择型号STM32L071KBU*(可能存在cubemax版本原因,芯片型号不一样,经过测试u3和u*是通用的)
选择PC15,选择GPIO_OutPut
选择PC14,选择GPIO_InPut
IO口的模式有上拉,开漏,推挽,此处输出口选择
输入口的选择
这样,IO口就配置好了。下面来配置系统时钟。
关于时钟配置,可以选择多种时钟源,分频,倍频后得到我们想要的系统时钟,此处介绍一种简单的时钟配置方式
1.选择Clock Configuration
2.在 HCLK(MHz) 中键入 32,回车
3.点击确定配置
这样时钟就配置好了
配置好GPIO口和时钟后就可以生成代码了,在Project Manager这个选项中配置保存路径,项目名称,函数库选择,编译方式。
1.编辑项目名称,路径,IDE
2.勾选生成项目.c/.h文件,勾选重新生成时备份以前生成的文件
3.最后点击GENERATE CODE,生成项目代码,打开项目文件
用户代码编写在用户沙箱中,可以避免CubeMax重新配置导致代码覆盖
- /* USER CODE BEGIN 2 */
- uint8_t KEY_Read(void)
- {
- uint8_t ucVal = 0;
- if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_14) == 0)
- {
- HAL_Delay(10);
- if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_14) == 0)
- ucVal = '0';
- }
- return ucVal;
- }
- void LED_Disp(uint8_t ucLed)
- {
- if((ucLed&1) == 1)
- HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);
- else
- HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);
- }
- /* USER CODE END 2 */
- /* USER CODE BEGIN Prototypes */
- uint8_t KEY_Read(void);
- void LED_Disp(uint8_t ucLed);
- /* USER CODE END Prototypes */
-
- /* USER CODE BEGIN PV */
- uint16_t usDly;
- uint8_t ucState;
- uint8_t ucKey;
- uint8_t ucLed;
- /* USER CODE END PV */
- /**
- * @brief This function handles System tick timer.
- */
- void SysTick_Handler(void)
- {
- /* USER CODE BEGIN SysTick_IRQn 0 */
-
- /* USER CODE END SysTick_IRQn 0 */
- HAL_IncTick();
- /* USER CODE BEGIN SysTick_IRQn 1 */
- usDly++;
- /* USER CODE END SysTick_IRQn 1 */
- }
- /* USER CODE BEGIN 4 */
- void KEY_Proc(void)
- {
- uint8_t ucVal = 0;
- ucVal = KEY_Read();
- if(ucVal != ucKey)
- ucKey=ucVal;
- else
- ucVal = 0;
- if(ucVal == '0')
- ucState ^= 1;
- }
- void LED_Proc(void)
- {
- if(usDly < 500) //用户延时函数
- return;
- usDly = 0;
-
- if(ucState == 0)
- ucLed ^= 1;
- else
- ucLed |= 1;
- LED_Disp(ucLed);
- }
- /* USER CODE END 4 */
- /**
- * @brief The application entry point.
- * @retval int
- */
- 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_RTC_Init();
- /* USER CODE BEGIN 2 */
-
- /* USER CODE END 2 */
-
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
- KEY_Proc();
- LED_Proc();
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
- }
按下USER按键,改变LD5的工作状态