• 【蓝桥杯物联网赛项学习日志】Day1 点亮led


    蓝桥杯物联网赛项的主控芯片是STM32L071KBU,这块板子外设不多,入门很快。赛项支持CubeMax进行初始化配置,搭配keil5进行编译,做出美味的程序。作为点灯工程师,我们先来点亮板子上的LD5。以此来熟悉CubeMax的配置和代码的编写。

    CubeMax的配置

    GPIO的配置

    在官方给的资料中,我们可以查阅到,用户自定义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,生成项目代码,打开项目文件

    Keil5中代码编写

    用户代码编写在用户沙箱中,可以避免CubeMax重新配置导致代码覆盖

    在gpio.h中底部的用户沙箱中编写代码

    1. /* USER CODE BEGIN 2 */
    2. uint8_t KEY_Read(void)
    3. {
    4. uint8_t ucVal = 0;
    5. if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_14) == 0)
    6. {
    7. HAL_Delay(10);
    8. if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_14) == 0)
    9. ucVal = '0';
    10. }
    11. return ucVal;
    12. }
    13. void LED_Disp(uint8_t ucLed)
    14. {
    15. if((ucLed&1) == 1)
    16. HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);
    17. else
    18. HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);
    19. }
    20. /* USER CODE END 2 */

    函数添加到头文件gpio.h的用户沙箱中

    1. /* USER CODE BEGIN Prototypes */
    2. uint8_t KEY_Read(void);
    3. void LED_Disp(uint8_t ucLed);
    4. /* USER CODE END Prototypes */

    在主函数中定义变量

    1. /* USER CODE BEGIN PV */
    2. uint16_t usDly;
    3. uint8_t ucState;
    4. uint8_t ucKey;
    5. uint8_t ucLed;
    6. /* USER CODE END PV */

    添加延时函数 (  在函数SysTick_Handler()中的用户沙箱中添加usDly++;   )

    1. /**
    2. * @brief This function handles System tick timer.
    3. */
    4. void SysTick_Handler(void)
    5. {
    6. /* USER CODE BEGIN SysTick_IRQn 0 */
    7. /* USER CODE END SysTick_IRQn 0 */
    8. HAL_IncTick();
    9. /* USER CODE BEGIN SysTick_IRQn 1 */
    10. usDly++;
    11. /* USER CODE END SysTick_IRQn 1 */
    12. }

    编写按键,led的功能代码(用户函数沙箱在最底部,注意记得声明函数)

    1. /* USER CODE BEGIN 4 */
    2. void KEY_Proc(void)
    3. {
    4. uint8_t ucVal = 0;
    5. ucVal = KEY_Read();
    6. if(ucVal != ucKey)
    7. ucKey=ucVal;
    8. else
    9. ucVal = 0;
    10. if(ucVal == '0')
    11. ucState ^= 1;
    12. }
    13. void LED_Proc(void)
    14. {
    15. if(usDly < 500) //用户延时函数
    16. return;
    17. usDly = 0;
    18. if(ucState == 0)
    19. ucLed ^= 1;
    20. else
    21. ucLed |= 1;
    22. LED_Disp(ucLed);
    23. }
    24. /* USER CODE END 4 */

    编写主函数(在主函数中只需要调用led,key的功能代码)

    1. /**
    2. * @brief The application entry point.
    3. * @retval int
    4. */
    5. int main(void)
    6. {
    7. /* USER CODE BEGIN 1 */
    8. /* USER CODE END 1 */
    9. /* MCU Configuration--------------------------------------------------------*/
    10. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    11. HAL_Init();
    12. /* USER CODE BEGIN Init */
    13. /* USER CODE END Init */
    14. /* Configure the system clock */
    15. SystemClock_Config();
    16. /* USER CODE BEGIN SysInit */
    17. /* USER CODE END SysInit */
    18. /* Initialize all configured peripherals */
    19. MX_GPIO_Init();
    20. MX_RTC_Init();
    21. /* USER CODE BEGIN 2 */
    22. /* USER CODE END 2 */
    23. /* Infinite loop */
    24. /* USER CODE BEGIN WHILE */
    25. while (1)
    26. {
    27. /* USER CODE END WHILE */
    28. KEY_Proc();
    29. LED_Proc();
    30. /* USER CODE BEGIN 3 */
    31. }
    32. /* USER CODE END 3 */
    33. }

    实验现象

    按下USER按键,改变LD5的工作状态

  • 相关阅读:
    chatGPT快捷键(最新版本)
    设计模式之责任链模式
    凡拓数字通过注册:年营收7亿 伍穗颖夫妇控制43%股权
    使用pytest+selenium编写网页UI自动化脚本和用例
    leetcode297 二叉树的序列化与反序列化
    java计算机毕业设计惠济区疫情期间监测管理系统源码+mysql数据库+系统+lw文档+部署
    SQLite 知识整理
    PHP 图像处理组件:Intervention/image
    2022浙江省网络安全技能赛决赛
    若依 从下载到成功运行及打包
  • 原文地址:https://blog.csdn.net/peng_papa/article/details/127735226