2024蓝桥杯嵌入式CT117E_M4学习

前言

        本文章旨在帮助一些基础较为落后的同学学习蓝桥杯嵌入式的相关知识,因此,阅读此文章需要你有:

  1. Windows电脑一台。
  2. 一定的c语言基础。
  3. 国信长安CT117E_M4嵌入式学习板。
  4. 学习的决心。
  5. 前几年的比赛资料(@耗不尽的先生)

1. 环境配置

        首先,需要安装keil5以及STM32CubeMX,keil5的安装步骤可以参考:Keil(MDK) 5 软件安装教程-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_42748213/article/details/90485750

        其中提到的mdk517表示keil版本为5.17,可以自己上网搜任意版本,但是5.32以上不自带AC5编译器,需要自己下载。另外,链接中的 8.添加器件库安装包 需要安装比赛资料中的 keil.STM32G4xx_DFP.1.2.0.pack 其它步骤一致。

       STM32CubeMX  的安装就直接点资料中的 SetupSTM32CubeMX-6.2.1-Win.exe 然后一直点就行(注意这个exe文件和安装路径都不能放在有中文路径的文件夹下),如果提示没有对应的jre或java,安装jre开头的两个exe文件就行。

2. 基础知识

        STM32CubeMX(以下简称Cube或MX)是st公司提供的图形化界面,它可以帮助我们快速的初始化各个外设,蓝桥杯只需要将引脚设置成output模式或input模式(后面会有ADC模式,此处不多叙述)。芯片的IO口输入输出相关知识可见:

单片机怎么输出高电平!推挽输出和开漏输出最本质的区别?(@爱上半导体)

上拉电阻的通俗解释(@爱上半导体)

下拉电阻的通俗解释(@爱上半导体)

        总而言之,IO口就是一个数字处理外设,可以产生3.3V的电压(高电平)或者0V电压(低电平),也可以把引脚上是高电平还是低电平输入进来。

        下面认识几个名词:

高电平:认为高于1.4V的电压为高电平。

低电平:认为低于0.8V的电压为低电平。

高阻态:引脚对地和Vcc的电阻有几兆欧,可以认为断路。

上升沿:电平由低变为高。

下降沿:电平由高变为低。

ADC:将模拟电压信号(0~3.3V中的任意电压)转为数字信号(一个和实际电压成正的比整数)

PWM:脉宽调制,通俗的讲就是矩形波,其中有一个重要参数占空比,它是高电平的时间与整个矩形波周期的比值。

GPIO:STM32的GPIO口以字母加数字编号,例如:PA5,PB12等。其中P是Pin的缩写,表示引脚,A是GPIOA的缩写,表示端口A,每个端口有16个引脚,从0到15编号。

那么现在,你已经有了充足的知识完成比赛。

3. 原理图

        原理图是表示具体电路连接方法的示意图。例如,我在某个引脚上连接了一盏LED灯,但是如果我不知道具体连在哪一个引脚,我就不知道该控制谁去输出高或低电平,所以能看原理图是一件十分重要的事情。

        打开资料中的竞赛平台,打开 《CT117E-M4产品手册》,翻到最后面有各元件连接示意。

        首先,VDD可以认为就是3.3V的意思,可以看到1D到8D引脚分别后面标了PC8-PC15,表示这个引脚和MCU(STM32G4主控芯片)的相应GPIO口,上面标的U1表示原件编号,可以不管,下面有相应的原件型号,SN74HC573ADWR,可以上网搜搜相关用法。

        如果《CT117E-M4产品手册》没有你想要的引脚信息,可以查看《CT117E_M4_SCH》。

        接下来我们可以来尝试点亮左侧的LED灯。

4. 用CubeMX生成代码点亮LED

        首先,我们打开CubeMX。然后按照以下步骤进行:

        点击ACCESS TO MCU SELECTOR

         在Part Number中输入STM32G431RB,右侧选中Tx结尾的后双击

        左侧System Core中,点击RCC,将HSE选择第三个Crystal/Ceramic Resonator 

选择Clock Configuration 

按如图所示选择

 这样基础配置就完成了。

回到之前的界面,选择相应的引脚,配置成GPIO_Output

选择左侧System Core的GPIO        

        里面output level 表示初始GPIO输出的电平;mode为输出方式(推挽与开漏);Pull up/down表示上下拉,这个在推挽输出模式时无效;output speed表示输出速度,这个可以理解为电平变化的速度。User Label 可以不管。

 上侧选择Project Manager

 填写相应配置:

 点击右上角GENERATE CODE

选择Open Project

keil的使用方法这里就不多介绍了,如果不清楚请自行上网查阅。

Keil系列教程03_主窗口和工具栏详细说明 - strongerHuang的文章 - 知乎icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/57703500在这里,我们点击编译后,0 error, 0 warning.

双击左侧main.c,打开main.c。

注意,文件内有许多 USER CODE BEGIN和USER CODE END,自己写的代码写在它两中间才会在cubemx再次生成代码时不被覆盖。

相关函数:

/**
  * @brief  Set or clear the selected data port bit.
  *
  * @note   This function uses GPIOx_BSRR and GPIOx_BRR registers to allow atomic read/modify
  *         accesses. In this way, there is no risk of an IRQ occurring between
  *         the read and the modify access.
  *
  * @param  GPIOx where x can be (A..G) to select the GPIO peripheral for STM32G4xx family
  * @param  GPIO_Pin specifies the port bit to be written.
  *         This parameter can be any combination of GPIO_PIN_x where x can be (0..15).
  * @param  PinState specifies the value to be written to the selected bit.
  *         This parameter can be one of the GPIO_PinState enum values:
  *            @arg GPIO_PIN_RESET: to clear the port pin
  *            @arg GPIO_PIN_SET: to set the port pin
  * @retval None
  */
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
//第一个参数填IO端口号,例如:GPIOC
//第二个参数填GPIO遍号,例如:GPIO_PIN_8
//第三个参数填输出高还是低,只能填两个中的一个:GPIO_PIN_SET(高电平),GPIO_PIN_RESET(低电平)

void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
//翻转引脚的输出电平,比如原本输出高电平,使用后相应引脚变为低电平。

void HAL_Delay(uint32_t Delay);
//等待一段时间,单位ms

所以,我们要将PC8输出高电平,可以如下图所示:

但此时我们还无法控制LED,因为它们中间的 SN74HC573ADWR芯片需要将LE引脚电平设置成高电平才能将输入的电平放到输出端,而LE低电平时锁存使能,此时PC8-15无论什么电平都不影响LED端的电平。因此,我们可以做一个让所有灯来回亮灭的操作。

HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_8);
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9);
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_10);
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_11);
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_12);
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_14);
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_15);
//闲上面8行太长?也可以用下面一句话代替:
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);
//还觉得长?也可以
HAL_GPIO_TogglePin(GPIOC,0xFF00);


HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_Delay(500);

        编译后无错误,就可以准备下载了。

先连接上板子的DOWNLOAD口,如果电脑无法识别硬件,请按照资料包中的软件环境里的串口驱动下载步骤进行(win10/11自带驱动)

选择上方“魔术棒”

选择Debug,并下拉选择DAP-Link

 选择后点击右侧Setting

注意Port为SW,且右侧SWDIO有如图所示文字(下面为没插板子时的截图

如果没出问题点击上方Flash Download,选择Reset and Run

勾选后点击OK后,还有一个OK(一定点OK!!!)

然后点击下载

下方出现如图所示后,可见板子开始所有灯一起,每500ms闪烁一次。

注意,之所以要连接锁存器 (SN74HC573ADWR ),是因为连接LED的引脚被LCD使用了,为了正确控制LED,我们可以锁存LED的电平数据后再在等待的500ms中传输LCD屏的数据且不会影响LED的亮灭。 

  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值