我是一个只会点灯的菜鸟;
相关文章
【STM32系列汇总】小白博主的STM32实战快速进阶之路(持续更新)
文章目录
1 前言
本文基于ST
的STM32F767ZI NUCLEO144
开发板,结合CubeIDE
的插件CubeMX
配置生成代码点亮板载的LED
,点亮可谓是单片机开发中的hello world
,非常简单;
2 理论分析
2.1 LED 原理
发光二极管简称为LED,生活中几乎无处不在,由含镓(Ga
)、砷(As
)、磷(P
)、氮(N
)等的化合物制成。当电子与空穴复合时能辐射出可见光,因而可以用来制成发光二极管。在电路及仪器中作为指示灯,或者组成文字或数字显示。砷化镓二极管发红光,磷化镓二极管发绿光,碳化硅二极管发黄光,氮化镓二极管发蓝光。因化学性质又分有机发光二极管OLED和无机发光二极管LED1。
LED是正向导通,反向截止的,它在电路设计中的符号如下图所示;
因此这里,有几点简单介绍一下:
- ① 通常接电源正极;
- ② 通常接地;
- 确保流过电流在
5mA
-10mA
;
2.2 板载资料
上一篇文章写到,如何快速构建CubeIDE环境,另外我还整理了官方的资料,文档都在这里,密码: 1rjv,打开en.DM00244518.pdf
,NUCLEO144
的板载资源如下图所示;
可以看到这里有三个用户LED
,下面就结合CubeIDE中的CubeMX插件配置生成相应的代码;
2.3 电路分析
解压文件en.nucleo_144pins_sch.zip
,打开原理图的pdf文件MB1137.pdf
;可以看到,Blue LED
和Red LED
,具体如下图所示;
Green LED
如下所示;
根据虚短和虚断,Vout=200K10K+200KVinV_{out} = \cfrac{200K}{10K+200K}V_{in}Vout=10K+200K200KVin ;感觉像是电压跟随器,那Vout=VinV_{out} = V_{in}Vout=Vin, 电路分析水平有点抠脚了;
Pin | LED | Mode |
---|---|---|
PB14 | RED | PP |
PB7 | BLUE | PP |
PB0 | GREEN | PP |
PP为推挽输出;
3 CubeMX配置
打开CubeIDE
,
3.1 SYS 配置
NUCLEO144板载一个ST-LINKV2,下载和调试程序的时候下面会用SWD模式,所以这里SYS的Debug选择Serial Wire
,具体如下图所示;
3.2 GPIO 选择
第一步:
在Pinout view的芯片试图上找到所需要的Pin,本文使用了 PB14
,PB7
,PB0
,图中找到PB7
,并鼠标点击并弹出菜单;
第二步:
选择GPIO
的模式为GPIO_Output
;
具体如下图所示;
3.3 GPIO 配置
选择了三个Pin,分别为PB14
,PB7
,PB0
,全都配置为:
-
GPIO output level
:初始化完成之后输出的电平状态为高; -
GPIO mode
:输出模式为推挽输出; - 上拉和下拉模式:这里暂不配置,没有影响;
完成后如下图所示;
4 程序生成
最终生成了配置代码如下;
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_14|GPIO_PIN_7, GPIO_PIN_SET);
/*Configure GPIO pins : PB0 PB14 PB7 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_14|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
5 程序下载
将NUCLEO144的CN4
和CN6
的跳帽设置为如下图的状态,这样就使用了板载的STLINK
给板载的MCU
下载固件;
进入调试模式并开始运行,终于点亮了,我手舞足蹈起来,表情无比激动(浮夸的演技