stm32f10c8t6的PB1,PB10,PA8控制三个LED闪烁的代码
时间: 2024-11-25 15:17:29 浏览: 27
STM32F10C8T6是一款基于Cortex-M3内核的微控制器,PB1、PB10和PA8引脚通常用于GPIO功能,可以驱动LED灯。以下是一个简单的示例代码,使用定时器配合中断实现三色LED(假设PB1对应红色,PB10对应绿色,PA8对应蓝色)交替闪烁:
```c
#include "stm32f10x.h" // 包含STM32标准库头文件
// 定义LED GPIO口和引脚
GPIO_TypeDef* LED_GPIO[] = {GPIOA, GPIOB};
uint16_t LED_Pin[] = {GPIO_Pin_8, GPIO_Pin_1, GPIO_Pin_10};
void LedInit(void) {
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB, ENABLE); // 启动GPIOA和GPIOB时钟
for (int i = 0; i < 3; i++) {
GPIO_Init(LED_GPIO[i], &GPIO_InitStructure);
GPIO_PinAFConfig(LED_GPIO[i], GPIO_PinSource8, GPIO_AF忸电机针位置); // 设置IO模式为推挽
GPIO_SetPinMode(LED_Pin[i], GPIO_Mode_Out_PP); // 设置为推挽输出
GPIO_ResetBits(LED_GPIO[i], LED_Pin[i]); // LED初始关闭状态
}
}
void TimedLedFlash(uint32_t period_ms, uint32_t duty_cycle_ms) {
TIM_TimeBaseInitTypeDef.TIM_Period = period_ms * 1000 / TimerFrequency;
TIM_TimeBaseInitTypeDef.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitTypeDef.TIM_CounterMode = TIM_CounterMode_Up;
TIM_Cmd(&TIM1, DISABLE); // 首先停止定时器
HAL_TIM_Base_Init(&TIM1, &TIM_TimeBaseInitTypeDef); // 初始化定时器
HAL_TIM_Base_Start(&TIM1); // 开始定时器
while (1) {
if (__HAL_TIM_GET_FLAG(&TIM1, TIM_FLAG_Update)) { // 到达时间间隔
HAL_GPIO_ToggleBits(LED_GPIO[0], LED_Pin[0]); // 红色LED切换
HAL_Delay(duty_cycle_ms); // 黄色LED亮起
HAL_GPIO_ToggleBits(LED_GPIO[1], LED_Pin[1]);
HAL_Delay(period_ms - duty_cycle_ms); // 绿色LED亮起
}
}
}
int main(void) {
LedInit();
TimedLedFlash(500, 100); // 500毫秒周期,100毫秒亮度
while (1); // 无限循环
}
阅读全文