第7周实验3–基于HAL库的LED流水灯
一安装并且使用CUBEMX.
下载地址:https://www.st.com/content/st_com/zh/stm32cubemx.html
下载好后安装CUBEMX.
点击NEXT.
在这里可以选择安装的位置,我在D盘创建了一个CUBEMX文件夹,然后将CUBEMX安装到里面。
选择DEFAULT,然后点击next。
等待安装
到这里我们就安装好了。
二。使用hal库制作流水灯
点击HELP 然后点击MANNAGE EMBEDDED SOFTWARE PACKAGE.然后点击INSTALL/REMOVE 安装hal库。
选择如下软件包进行下载,它会要求意法半导体官方账号账号,有的可以直接登录,没有的话可以利用邮箱注册一个。
选择NEW PROJECT
在PART NAME中选择STM32F103C8T6芯片,点击START PROJECT.
点击system core,进入SYS,在debug下选择serial wire
点击RCC将hse那里设为Crystal/Ceramic Resonator:
点击GPIO 将需要的端口设置为OUTPUT
点击进入project manager。进行设置
点击上方法 GENRATE CODE,便可生成如下文件
进入MDK-ARM.
点击CUBE LED.uvprojx.进入程序。
然后将以下代码复制到main里面。
` 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灭`
然后点击保存烧录。
烧录运行:
流水灯HAL
三。查看波形:
XTAL这里改成8kHZ
Debug 出选择 “Use Simulator”,“Dialog DLL” 和 “Parameter” 也需要更改,软件仿真填入
“DARMSTM.DLL” ,参数为 “-pSTM32F103VE”,这里是我的STM32芯片型号。硬件仿真填入
“TARMSTM.DLL” 。
随后点击:START DEBUG 使用逻辑分析仪,得到波形:
四.中断流水灯。
找到 void HAL_GPIO_EXIT_CALLBACK(uint16_t GPIO_Pin)
`int i=0;
if(GPIO_Pin==GPIO_PIN_0)//读取PB0电平
{
GPIO_PinState State=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);//写入PB0电平
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_All,GPIO_PIN_SET);
if (State==GPIO_PIN_SET) {//如果是高电平,进行流水灯
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//
for(i=0;i<1000000;i++)//用for循环代替延时函数
{
}
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//
for(i=0;i<1000000;i++)
{
}
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//
for(i=0;i<1000000;i++)
{
}
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//
for(i=0;i<1000000;i++)
{
}
}
else if(State==GPIO_PIN_RESET)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_All,GPIO_PIN_SET);
}`
然后烧录进STM32
流水灯中断