
基于江协科技固件库和HAK库的STM32实验LED流水灯与HAL库设置按键暂停实验任务一可参考本人之前的博客1.实验任务固件库LED流水灯项目创建与固件库文件添加创建工程文件夹复制标准外设库文件从江协科技提供的固件库STM32F10x_StdPeriph_Lib_V3.5.0中复制文件到对应目录启动文件根据芯片容量选择启动文件| 中容量64~128KB Flash |startup_stm32f10x_md.s|固件库的驱动文件将Libraries/STM32F10x_StdPeriph_Driver/下的inc/和src/整个文件夹复制到工程的Libraries/STM32F10x_StdPeriph_Driver/目录。新建Librarys等存放库文件在Keil5中新建工程添加文件需要自己在固件库中寻找需要的配置魔术棒点击工具栏魔术棒Target晶振频率(Xtal)填写8.0MHzOutput勾选Create HEX File在Define栏中输入宏定义STM32F10X_MD,USE_STDPERIPH_DRIVER在Include Paths栏中添加头文件Debug选择Use Simulator软件仿真用于后续逻辑分析仪观察波形。右侧Dialog DLL填写DARMSTM.DLLParameter填写-pSTM32F103C8与芯片型号一致。配置 stm32f10x_conf.h确保需要的头文件#includestm32f10x_gpio.h#includestm32f10x_rcc.h#includemisc.hKeil5软件仿真仿真设置Options for Target → Debug中已选择Use Simulator点击Build编译工程点击Start/Stop Debug Session打开逻辑分析仪并添加引脚View → Analysis Windows → Logic AnalyzerSetup...New输入引脚输入PORTA.0输入PORTA.1输入PORTA.2Display Type设置为Bit运行仿真Run运行仿真。2. 实验任务HAL库流水灯暂停与恢复HAL库工程创建STM32CubeMX方式首先要正确安装java环境安装CUBEMX下载HAL库新建STM32CubeMX工程ACCESS TO MCU SELECTOR选择芯片型号Start ProjectLED引脚配置在芯片引脚图上点击PA0选择GPIO_Output同理配置PA1、PA2为GPIO_Output在GPIO配置页中将三个引脚的GPIO output level设为Low配置时钟在Clock Configuration中配置系统时钟生成代码在Project Manager中填写工程名和路径Toolchain/IDE选择MDK-ARM V5点击GENERATE CODE生成Keil工程。核心代码在main.c的while(1)循环中写入/* USER CODE BEGIN WHILE */while(1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */if(flag1){HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);//PA0亮灯HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);//PA1熄灯HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);//PA2熄灯HAL_Delay(100);//延时0.1sHAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);//PA0熄灯HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);//PA1亮灯HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);//PA2熄灯HAL_Delay(100);//延时0.1sHAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);//PA0熄灯HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);//PA1熄灯HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);//PA2亮灯HAL_Delay(100);//延时0.1s}elseif(flag0){HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);//PA0熄灯HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);//PA1熄灯HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);//PA2熄灯}}/* USER CODE END 3 */实验现象操作现象上电复位三个LED依次流水点亮PA0→PA1→PA2循环第一次按下按键流水灯立即暂停三个LED全部熄灭再次按下按键流水灯恢复运行从当前状态继续流水反复按下在运行和暂停之间切换