【STM32+HAL库】---- GPIO点亮LED
硬件开发板:STM32G0B1RET6
软件平台:cubemax+keil+VScode
1 新建cubemax工程
1.1 启动cubemax,创建工程
1.2 搜索对应的主控芯片
(可以点亮五角星收藏该芯片,方便后续使用)
双击即可进入芯片功能配置界面
1.3 配置系统时钟RCC
时钟树配置如下,16M的HSI经PLL锁相环倍频分频处理后得到PLLCLK,以提供64M的SYSCLK,再得到64M得HCLK
(之所以不选用外部高速时钟,是因为该开发板上没有配置外部高速高速时钟HSE,条件允许的情况下优先使用HSE)
1.4 配置相关GPIO引脚
查询开发板原理图:
可编程LED由PA5引脚控制。其电路原理:PA5引脚连接mos管的栅极,当栅极为低电平时,mos管截止,led不亮;当栅极为高电平时,mos管导通,LED接到电源GND,被点亮。
选择PA5引脚,选择GPIO_Output模式
进入GPIO设置界面
- 初始化引脚电平输出选择低电平,这样LED上电复位为熄灭状态
- 输出模式选择推挽输出
- 按照电路原理,引脚输出高电平,mos管导通,LED被点亮,故该引脚可选择为下拉
- 输出速度默认即可
- 用户标签自己命名,方便使用
1.5 导出工程
进入SYS,勾上Serial Wire选项
使对应引脚作为下载调试接口,避免IO口复用
进入工程管理界面
最后导出即可
2 Keil相关配置
点击魔术棒
debug选择ST-link(该开发板内部已经搭载了ST-Link)
进入setting界面,显示序列号,说明芯片识别成功,可以正常烧录
进入Flash Download界面,勾选Reset and Run,让开发板可以自动复位
3 代码
3.1 点亮LED
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();
/* USER CODE BEGIN 2 */
HAL_GPIO_WritePin(GPIOA,LED_Pin,GPIO_PIN_SET); //点亮LED
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
实验现象:
3.2 实现LED闪烁
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();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_Delay(500);
HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin); //500ms翻转一次LED电平
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
本文来自博客园,作者:晚风也温柔,转载请注明原文链接:https://www.cnblogs.com/zxr-blog/p/17956209