【STM32学习笔记】(5)—— STM32工程添加源文件和头文件

向工程目录里创建头文件和源文件

STM32的工程文件构成较为复杂,同时为STM32工程文件添加源文件和头文件也是较为复杂的,下面就由此文章来介绍怎么给STM32工程添加源文件(.c)与头文件(.h),以跑马灯实验为例。

1、在Template工程文件夹下面新建一个 HARDWARE 的文件夹,用来存储以后与硬件相关的代码,然后在 HARDWARE 文件夹下新建一个 LED 文件夹,用来存放与 LED 相关的代码。

2、在LED文件夹下新建文本文档,然后分别改名为Led.c和Led.h,这两个文件即为我们需要添加至工程里的源文件和头文件。

 

3、在Template路径下,找到USER文件夹,双击进入此文件夹后,然后我们打开 USER 文件夹下的 Template.uvprojx 工程。

 

 

●向工程文档里添加源文件

 

4、在工程文档路径下我们右击Template,然后单击Manage Project Items…….。

5、进入该界面后单击此图标,创建一个HARDWARE,并把HARDWARE里的LED文件夹下面里LED.c文件。

6、紧接着添加此Led.c文件。 

●向工程文档里添加头文件

7、首先先找到此魔术棒,进入C/C++界面里。

8、在C/C++界面里找到这个图标,并单击进入。

 

 

9、进入后点击此图标,添加头文件的目录。

 

        注意:在添加头文件的路径时,一定要到最后一级目录,例如,Led.h在LED文件夹下面,那么我们就要选择这个文件夹,不能选择HARDWARE文件夹,如果这一步出了问题,会出现编译不成功的状况。

 

 

10、添加完头文件的路径后,点OK退出界面。在Led.c里写入#include ”Led.h”

        然后点击编译按钮,Led.c左边会出现一个加号,点击后会看到Led.h,此现象表明,Led.c和Led.h都已成功添加至工程中了。

### STM32蜂鸣器控制源代码文件示例 对于STM32平台上的蜂鸣器控制,下面展示了一个简单的C语言程序实例。此例子展示了如何初始化GPIO引脚以及如何设置定时器以生成PWM信号来驱动有源或无源蜂鸣器。 #### GPIO与TIM初始化函数 ```c #include "stm32f1xx_hal.h" // 定义使用的硬件资源 #define BUZZER_PIN GPIO_PIN_0 #define BUZZER_PORT GPIOA #define TIMx TIM2 #define PWM_CHANNEL TIM_CHANNEL_1 void Buzzer_Init(void){ __HAL_RCC_GPIOA_CLK_ENABLE(); // 启用GPIOA时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; /* 配置PA0作为推挽输出 */ GPIO_InitStruct.Pin = BUZZER_PIN; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(BUZZER_PORT, &GPIO_InitStruct); __HAL_RCC_TIM2_CLK_ENABLE(); // 开启定时器2的时钟 TIM_HandleTypeDef htim2; htim2.Instance = TIMx; htim2.Init.Prescaler = 8399; // 设置预分频值 htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 999; // 自动重装载值(ARR) htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_PWM_Init(&htim2) != HAL_OK){ Error_Handler(); } TIM_OC_InitTypeDef sConfigOC; sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 499; // 初始占空比(CCR) sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, PWM_CHANNEL) != HAL_OK){ Error_Handler(); } } ``` 上述代码完成了对蜂鸣器所连接IO口及定时器外设的相关参数设定工作[^1]。 #### 发声频率调整函数 为了改变发出的声音频率,可以通过修改`Pulse`成员变量即比较匹配寄存器(CCR)中的数值实现: ```c void Set_Buzzer_Frequency(uint16_t freqHz){ uint32_t period_us = 1000000 / freqHz; // 计算周期时间(us) uint32_t pulse_width_us = period_us * 50 / 100; // 假定50%占空比计算脉宽(us) double ticks_per_us = SystemCoreClock / 1e6; // 每微秒对应的计数次数 uint16_t arr_value = (uint16_t)(ticks_per_us * period_us); uint16_t ccr_value = (uint16_t)(ticks_per_us * pulse_width_us); __HAL_TIM_SET_AUTORELOAD(TIMx, arr_value); // 更新自动重载值 __HAL_TIM_SET_COMPARE(TIMx, PWM_CHANNEL, ccr_value); // 更新比较值 } ``` 这段代码实现了根据给定的目标频率动态更新PWM波形的能力,从而达到调节音调的效果[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂飙的犇牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值