怎样使stm32f103c8t6的PB3口实行流水灯程序完整代码
时间: 2024-11-12 14:17:20 浏览: 25
要在STM32F103C8T6上通过PB3口实现流水灯程序,首先你需要确保已经配置了GPIO和PWM功能,并连接了一个LED灯阵列。这里是一个基本的C语言示例代码:
```c
#include "stm32f10x.h"
// GPIO初始化设置
void GPIO_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 配置PB3所在的GPIO时钟
GPIO_PinModeConfig(GPIOA, GPIO_Pin_3, GPIO_Mode_AF_PP, GPIO_Speed_50MHz); // 设置PB3为推挽输出模式并允许中断
}
// PWM初始化设置
void TIM3_Init(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // 配置TIM3时钟
TIM_TimeBaseInitTypeDef.TIM_TimeBaseStructure = {0}; // 初始化定时器的基本结构
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_OCInitTypeDef TIM_OC_InitStruct = {0};
TIM_OC_InitStruct.TIM_OCMode = TIM_OCMode_PWM1; // 设置PWM模式
TIM_OC_InitStruct.TIM_OutputState = TIM_OutputState_Enable; // 启动输出
TIM_OC_InitStruct.TIM_Pulse = 500; // 设置占空比,比如这里是50% (脉冲宽度为500us)
TIM_OC1Init(TIM3, &TIM_OC_InitStruct); // 初始化通道1,PB3引脚对应的是TIM3_CH1N
TIM_ARRPreloadCmd(TIM3, ENABLE); // 先预装载计数器值
TIM_Cmd(TIM3, ENABLE); // 启动定时器
}
// 主函数,实现LED灯的流水效果
int main(void)
{
GPIO_Init();
TIM3_Init();
uint8_t ledCount = 0;
while (1) // 无限循环
{
TIM_SetCompare1(TIM3, ledCount * 500); // 更新定时器比较寄存器值,改变LED亮灭顺序
TIM_Cmd(TIM3, DISABLE); // 关闭PWM
TIM_Cmd(TIM3, ENABLE); // 开启PWM
ledCount = (ledCount + 1) % LED_COUNT; // 循环数组,防止溢出
if (ledCount == 0) // 如果第一个LED刚刚熄灭,则暂停一段时间再继续
HAL_Delay(LED_CYCLE_DELAY); // LED周期延时,例如100ms
}
return 0;
}
```
阅读全文