本文是学习这两个链接写的文章https://blog.youkuaiyun.com/weixin_56102526/article/details/120877293
https://blog.youkuaiyun.com/LX567567/article/details/133994620
建议直接去看这两个,依次是LED流水灯和中断的,流水灯的同时介绍了如何安装cubemx
HAL库的三个GPIO口LED流水灯
1.CubeMX里面创建项目
选择芯片
这是扣的别人的图,我的是STM32C8T6左边那个框可以选我是直接输入的,然后在右边就有对应的芯片可以选择,也是选你自己的芯片,然后进入sys
进入rcc
选择GPIO因为我是初次进行实验所以也是跟着选择的PC13,PB0,PA15
点击对应的引脚选择为GPIO输出,然后选择输出等级
设置时钟clock
设置project manager
最后就可以点右上角的创建了
创建的时候如果你没有下载对应需要的固件库你需要去在线创建登录你的st账号下载,这样最方便最快,去官网下载对应的库你需要非常确定你用的库包含了你用的所有东西,不然始终会让你登录下载对应版本,下载完毕后创建会弹出一个窗口
这是你创建项目的位置,点击打开就会keil打开你的项目,这是他自动帮你配置好的,这时候你就可以找到你的主程序main在里面写你需要的东西。
2.keil部分
在你的main.c中的两个while(1)程序中写入下面代码
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 灯1亮
HAL_Delay(1000); // 延时1s
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 灯1灭
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET); // 灯2亮
HAL_Delay(1000); // 延时1s
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET); // 灯2灭
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); // 灯3亮
HAL_Delay(1000); // 延时1s
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); // 灯3灭
这个是对应的控制三个选择的端口的LED亮灭代码,写的有点冗杂了,没啥要求就不改了。
先点击编译,没问题确保硬件链接没问题后再下载。我的连接如下
使用的是ST-Link/v2这个使用的话也需要安装对应的驱动这里就不赘述,然后就连上你的设备进行下载,没问题的话你的三个灯会交替闪烁。
3.keil上的逻辑分析仪波形观察
逻辑分析仪的使用方法不多描述,添加你需要观测的端口,设置为bit选个颜色看波形周期就行,
红黄蓝三个分别是PB0,PC13和PA15的波形,闪烁为交替闪烁,周期也大致符合,没什么问题。
STM32hal库流水灯
HAL库的中断控制闪烁
1.CubeMX里面创建项目
也是第一次做,完全跟着开头链接第二个在做,重新创建文件,选择芯片后设置PC15 、PA3、PB0为LED发光的端口,
设置PA15为中断
设置为浮空并且下降沿、上升沿都触发
开启中断,并且配置优先级
设置时钟36M
sys配置和project manager跟上面一样,然后就创建项目打开。
2.keil部分
主程序添加中断函数判别变量的设置
/* USER CODE BEGIN PV */
uint16_t flag = 2; // 默认关闭流水灯
/* USER CODE END PV */
找到while函数修改
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(flag == 1)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,1);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,0);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,1);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,0);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,1);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,0);
HAL_Delay(100);
}
}
中段触发函数的设置
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
/* Prevent unused argument(s) compilation warning */
if(GPIO_Pin == GPIO_PIN_15) // 判断是否为对应的中断端口
{
GPIO_PinState pin_State = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_15); // 获取对应端口状态
// 端口电平到判断变量的映射
flag = pin_State;
}
/* NOTE: This function Should not be modified, when the callback is needed,
the HAL_GPIO_EXTI_Callback could be implemented in the user file
*/
}
这些代码会有一些警告但是算是成功编译检查连接后编译
正常状态是三个灯常亮,PA15的插针断开后会变为流水灯状态,插上后又变为常亮。
STM32中断实验