完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
1个回答
|
|
一、 HAL库
说到STM32的HAL库,就不得不提STM32CubeMX,其作为一个可视化的配置工具,对于开发者来说,确实大大节省了开发时间。STM32CubeMX就是以HAL库为基础的,且目前仅支持HAL库及LL库! STM32CubeMX是ST意法半导体近几年主推的STM32芯片图形化配置工具,允许用户使用图形化向导生成C初始化代码,也大大的减轻开发工作和时间,且STM32CubeMX几乎覆盖了STM32全系列芯片。 STM32CubeL4固件包的文件结构如下图所示: 根据HAL库的命名规则,其API可以分为以下三大类:
1. GPIO / AFIO配置 下面先看看GPIO / AFIO端口位的基本结构(参考自《SMT32L475VE Reference manual.pdf》): 从上图来看,每个I / O端口可以自由编程,通过寄存器配置可实现多种输入、输出、复用模式,比如浮空输入、上拉输入、下拉输入、模拟输入、复用功能输入、开漏输出、推挽输出、复用功能输出等。 简单介绍下各种模式的特点:
这里介绍使用STM32CubeMX配置工程的一般步骤:
下面配置RCC时钟,我的STM32L4板子使用外部高速时钟源HSE的晶振频率为8MHZ,外部高速时钟源HSE选择陶瓷晶振: 配置好了RCC时钟源及时钟引脚,接下来配置时钟树,首先是时钟源HSE的时钟频率配置为8MHZ,接下来就是时钟信号选择和时钟的分频、倍频系数配置了,STM32L431支持的最高频率80MHZ,具体的参数配置如下图所示: 下面开始配置GPIO外设的图形化配置过程,先搜索并配置目标引脚PA5 / PA6 / PA7为输出模式GPIO_Output:
下面配置NVIC中断控制器 外部中断线的使能、优先级分组、抢占优先级、子优先级 GPIO、EXTI、NVIC配置完了,接下来配置工程管理器后就可以生成工程代码了。 STM32CubeMX配置完毕,直接点击右上角的GENERATE CODE即可生成工程代码,生成完成后打开项目,即可直接调用配置的KEIL V5 IDE打开生成的工程,接下来在KEIL MDK中完成用户逻辑代码和回调。 *三、完成回调函数编写 // CoreSrcstm32l4xx_it.c /** * @brief This function handles EXTI line1 interrupt. */ void EXTI1_IRQHandler(void) { /* USER CODE BEGIN EXTI1_IRQn 0 */ /* USER CODE END EXTI1_IRQn 0 */ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1); /* USER CODE BEGIN EXTI1_IRQn 1 */ /* USER CODE END EXTI1_IRQn 1 */ } /** * @brief Handle EXTI interrupt request. * @param GPIO_Pin Specifies the port pin connected to corresponding EXTI line. * @retval None */ void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) { /* EXTI line interrupt detected */ if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00u) { __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); HAL_GPIO_EXTI_Callback(GPIO_Pin); } } // stm32l4xx_hal_gpio.c /** * @brief EXTI line detection callback. * @param GPIO_Pin Specifies the port pin connected to corresponding EXTI line. * @retval None */ __weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { /* Prevent unused argument(s) compilation warning */ UNUSED(GPIO_Pin); /* NOTE: This function should not be modified, when the callback is needed, the HAL_GPIO_EXTI_Callback could be implemented in the user file */ } main函数保持默认即可,通过按键KEY1控制LED就完成了。 如果想实现下载后立即执行,需要在下面的对话框中勾选Reset and Run选项: 我们使用KEIL 5编译HAL库的程序编译速度巨慢,因为生成的工程默认是使用ARM Compiler V5(也即ARM GCC)编译的,如果取消Browse Infomation选项可以明显加快编译速度,但取消该选项后就无法实现跳转到某函数或变量的定义与声明了,不便于调试。新版的KEIL MDK V5(可能是V5.21之后的版本吧)支持ARM Compiler V6(也即ARM CLANG),该编译器得益于LLVM和Clang技术可以大大提升编译速度,下面我们选择ARM Compiler V6重新编译,配置界面如下(可参考:Migrate ARM Compiler 5 to ARM Compiler 6): 如果使用ARM Compiler V6编译器,C语言需要选择gnu99(或gnu11),否则会出现很多编译错误(可能HAL库中使用了一些GNU C语法) |
|
|
|
只有小组成员才能发言,加入小组>>
3322 浏览 9 评论
3000 浏览 16 评论
3497 浏览 1 评论
9070 浏览 16 评论
4090 浏览 18 评论
1191浏览 3评论
613浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
603浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2341浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1899浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 13:45 , Processed in 1.167923 second(s), Total 83, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号