ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

STM32CubeMX+HAL库快速上手指南

STM32CubeMX+HAL库快速上手指南

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言

一、ST官方给的文件(UM1718)

二、HAL库函数速查手册 | 波特律动

三、练习(STM32F103C8T6)

1.配置

2.代码部分

总结


前言

初次接触stm32cubemx,发现这个软件能直接生成初始化,和之前在学校学的标准库不一样,以前标准库还是自己手动配置的工程文件,手写的写的.c、.h文件,当时我就在想老师要求各个外设初始化的时候需要模块化,每个外设初始化配置的东西也差不多,完全可以官方配置好,我们自己修改参数就行。现在这个软件通过图形化的形式配置时钟,设置外设,省去很多时间,但是我想写一点东西的时候就一点无从下手,不知道调用什么函数,目前就搜集了一些资料,虽然ai现在直接跟它说,它几秒钟就写好了,但是感觉自己印象不深刻,轮到自己敲还是犯难。

一、ST官方给的文件(UM1718)

这部分还是介绍软件生成代码的,介绍了几个文件的作用,以及命名规则。

官方给的串口初始化,一般配置外设都是这几个函数,注意配置函数和释放函数的区别,不要看成一个了。

二、HAL库函数速查手册 | 波特律动

还是不知道能用哪些函数,HAL库函数速查手册 | 波特律动这个网站可以查看,也可以直接看下面(这里显示的不全):

GPIO:

HAL_GPIO_WritePin(端口, 引脚号, 电平状态); // 写引脚电平 HAL_GPIO_ReadPin(端口, 引脚号); // 读引脚电平 HAL_GPIO_TogglePin(端口, 引脚号); // 翻转引脚电平

例子:

// 写引脚 void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); // 示例:PB0输出高 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 读引脚 GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); // 示例:读取PB0电平 if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == GPIO_PIN_RESET){} // 翻转电平 void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);

UART:

HAL_UART_Transmit(&串口句柄, 数据指针, 数据长度, 超时时间); // 串口发送(阻塞方式) HAL_UART_Receive(&串口句柄, 数据指针, 数据长度, 超时时间); // 串口接收(阻塞方式) HAL_UART_Transmit_IT(&串口句柄, 数据指针, 数据长度); // 串口发送(中断方式) HAL_UART_Receive_IT(&串口句柄, 数据指针, 数据长度); // 串口接收(中断方式) HAL_UART_Transmit_DMA(&串口句柄, 数据指针, 数据长度); // 串口发送(DMA方式) HAL_UART_Receive_DMA(&串口句柄, 数据指针, 数据长度); // 串口接收(DMA方式)

例子:

// 阻塞发送,huart1是CubeMX自动生成的句柄 HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); // 示例 uint8_t buf[]="Test OK\r\n"; HAL_UART_Transmit(&huart1, buf, sizeof(buf), 100);

ADC:

HAL_ADC_Start(&ADC句柄); // 启动ADC转换(阻塞方式) HAL_ADC_Stop(&ADC句柄); // 停止ADC转换 HAL_ADC_Start_IT(&ADC句柄); // 启动ADC转换(中断方式) HAL_ADC_Stop_IT(&ADC句柄); // 停止ADC转换(中断方式) HAL_ADC_Start_DMA(&ADC句柄, 数据指针, 长度); // 启动ADC转换(DMA方式) HAL_ADC_Stop_DMA(&ADC句柄); // 停止ADC转换(DMA方式) HAL_ADC_PollForConversion(&ADC句柄, 超时时间); // 等待ADC转换完成(阻塞轮询) HAL_ADC_GetValue(&ADC句柄); // 获取ADC采样值

三、练习(STM32F103C8T6)

1.配置

(1)Debug模式修改一下,改成图片上的,如果用no debug 会导致只能烧录一次,后面烧录会显示stlink连接不成功,解决措施就是在STM32 ST-LINK Utility这个软件上擦除已经烧录进去的东西。(连接不上:在软件里面选择“connect to the target”+按住stm32F103C8t6的复位键,擦除后记得断开连接,不然会占用设备)

(2)配置时钟树

这里一般选择HSE高速外部震荡器作为时钟源,比较稳定。

(3)导出

如果是用keil的话选择MDK-ARM,我这里配置的是cmake,所有的配置搞完选择右上角的'GENERATE CODE"就可以生成代码了。如果下一次有改动的话也是点一下这个就更新配置了。

2.代码部分

环境配置:vscode+stm32cubemx+cmake(在vscode里面搜索这个会安装配套的扩展包,不需要自己手动配置,顺带补充一下,在vscode的左下角的设置-配置文件-新建配置文件,可以将不同的环境区分开来)。

自定义文件:第一,在cmake文件下新建文件夹user,在user下面新建文件CMakeLists.txt(不能直接放在cmake下面那个,mx重新生成的时候这些会被覆盖掉);在文件根目录下面新建文件夹,创建.c和.h文件;按照图片内容在.txt文件下修改变量名(注意看清楚左侧选的文件)

  1. 复制cmake-stm32cubemx-camkelists.txt文件红框里面的内容到我们新建的.txt文件,

  1. 我们自己建的文件CMakeLists.txt里面是这样的,里面的内容都是前面去复制的。
  2. 在根目录下面的CMakeList.txt新增框起来的部分(这部分在blibli上看的视频没有第一个红框的部分,应该是我嵌入的ai编译错误之后给我加的,,,)


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

返回列表