新沂做网站,番禺网站建设多少钱,第一次做网站不知道,物业管理系统论文文章目录 一、功能需求分析二、Proteus绘制电路原理图三、STMCubeMX 配置引脚及模式#xff0c;生成代码四、MDK打开生成项目#xff0c;编写HAL库的按键检测代码五、运行仿真程序#xff0c;调试代码 一、功能需求分析
在完成GPIO输入输出案例之后#xff0c;开始新的功能… 文章目录 一、功能需求分析二、Proteus绘制电路原理图三、STMCubeMX 配置引脚及模式生成代码四、MDK打开生成项目编写HAL库的按键检测代码五、运行仿真程序调试代码 一、功能需求分析
在完成GPIO输入输出案例之后开始新的功能模块的学习。同样是实现按键输入检测的功能在GPIO的案例中我们使用的是查询扫描方式这种方式有一个缺点浪费CPU算力功能代码是放在while循环中一直在循环检测。这一次我们介绍中断扫描方式完成按键状态检测只有在开关按键状态变换的时候才会触发中断通知CPU处理中断事件执行中断服务。
需求分析
按键检测使用中断扫描方式连线方式PA0-LED0PA1-LED1PA4-KEY0PA6-KEY1按键中断模式设置为上升沿触发KEY0控制LED0KEY1控制LED1每次开关状态变化使LED状态反转。
二、Proteus绘制电路原理图
Proteus绘制需要对基本元器件的名称有一定了解如下方的发光二极管LED、电阻RES可以在网上查找对应的元器件名称列表方便以后绘制。
绘制电路原理图的步骤创建画布》芯片选型及放置》元器件选型及放置》连接电路》修改元器件参数》仿真运行。
下图为所需元器件清单。 下图为电路原理图。
三、STMCubeMX 配置引脚及模式生成代码
接下来根据原理图绘制创建CubeMX项目配置引脚及工作模式生成MDK项目代码。
创建项目选择Pinout》system core》GPIO 点击PA0选择GPIO_Output推挽输出模式同理配置PA1。
点击PA4选择GPIO_EXTI4同理配置PA6。 选择Pinout》system core》NVIC 在配置中勾选EXTI4和【95】的中断Enabled选项并设置各自的抢占式优先级为3和2。 优先级值越小优先级越高抢占式优先级可以实现中断嵌套也就是说在中断执行中断服务时如果中断【】触发了中断会暂停中断执行中断【】。
在clock单元配置系统时钟为72MHz。 在Project单元填写项目名称、保存路径、IDE和版本。 在 code generator中配置添加库的方式为所需库用户代码在每次项目重新生成时保留。配置完成通过以上步骤完成了2个LED引脚的模式配置及时钟配置接下来点击GENERATE生成项目代码。 找到生成路径可以看到项目目录文件。
四、MDK打开生成项目编写HAL库的按键检测代码
从上面步骤中生成了MDK项目。 在MDK-ARM目录中找到项目快捷方式打开项目。 在gpio.c文件中找到__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)函数复制到main.c中。 __weak 为弱函数如果项目中有不带__weak的同名函数被调用时则执行同名函数如果只有__weak函数被调用时则其被执行。 拷贝后放在注释为用户代码区域当中断触发则此函数被调用。 callback函数全部代码 这里出现了新的GPIO函数引脚状态切换有两个参数GPIO组名和引脚名。 还有一个消除中断挂起位的宏调用中断触发后需要用户手动清除挂起位。
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{//PA4中断服务if(GPIO_Pin GPIO_PIN_4)HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);//PA6中断服务if(GPIO_Pin GPIO_PIN_6)HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_1);__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
}在项目中勾选生成HEX选项HEX文件就是MDK编译生成的十六进制文件作为烧录到开发板的源程序文件使用当然这里我们使用仿真在Proteus中加载HEX即可。
点击编译程序生成HEX文件。在编译窗口显示生成了以下信息则编译成功保证 0 errors再进行下一步。
五、运行仿真程序调试代码
在Proteus中双击芯片选择加载程序路径。 04_NVIC\MDK\NVIC\MDK-ARM 上面是我的项目的HEX文件目录路径。
点击仿真按钮运行程序查看功能执行结果。
可以看到两个黄色LED随着开光闭合断开改变切换点亮熄灭状态功能正常。
代码链接STM32-04基于HAL库CubeMXMDKProteus中断案例按键中断扫描
至此我们已经完成了STM32的开发环境搭建以及测试案例的编写后面会给大家介绍更多的功能。