规划建网站步骤,wordpress教程下载,海南的网站建设公司哪家好,网站建设需要条件1.硬件
STM32单片机最小系统LED灯模块
2.软件
pwm驱动文件添加定时器HAL驱动层文件添加GPIO常用函数定时器输出PWM配置步骤main.c程序
#include sys.h
#include delay.h
#include led.h
#include pwm.hint main(void)
{HA…1.硬件
STM32单片机最小系统LED灯模块
2.软件
pwm驱动文件添加定时器HAL驱动层文件添加GPIO常用函数定时器输出PWM配置步骤main.c程序
#include sys.h
#include delay.h
#include led.h
#include pwm.hint main(void)
{HAL_Init(); /* 初始化HAL库 */stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */led_init(); /* 初始化LED灯 */pwm_init(500 - 1, 72 - 1);//arr499psc71uint16_t i 0;while(1){ for(i 0; i 300; i){pwm_compare_set(i);//修改CCR值delay_ms(10);}for(i 0; i 300; i){pwm_compare_set(300 - i);delay_ms(10);}
// led1_on();
// led2_off();
// delay_ms(500);
// led1_off();
// led2_on();
// delay_ms(500);}
}
**timer_init(500 - 1, 720 - 1);//定时500ms**语句定时参考 led.c程序
#include led.h
#include sys.h//初始化GPIO函数
void led_init(void)
{GPIO_InitTypeDef gpio_initstruct;//打开时钟__HAL_RCC_GPIOB_CLK_ENABLE(); // 使能GPIOB时钟//调用GPIO初始化函数gpio_initstruct.Pin GPIO_PIN_8 | GPIO_PIN_9; // 两个LED对应的引脚gpio_initstruct.Mode GPIO_MODE_OUTPUT_PP; // 推挽输出gpio_initstruct.Pull GPIO_PULLUP; // 上拉gpio_initstruct.Speed GPIO_SPEED_FREQ_HIGH; // 高速HAL_GPIO_Init(GPIOB, gpio_initstruct);//关闭LEDled1_off();led2_off();
}//点亮LED1的函数
void led1_on(void)
{HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET); // 拉低LED1引脚点亮LED1
}//熄灭LED1的函数
void led1_off(void)
{HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET); // 拉高LED1引脚熄灭LED1
}//翻转LED1状态的函数
void led1_toggle(void)
{HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_8);
}//点亮LED2的函数
void led2_on(void)
{HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET); // 拉低LED2引脚点亮LED2
}//熄灭LED2的函数
void led2_off(void)
{HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET); // 拉高LED2引脚熄灭LED2
}//翻转LED2状态的函数
void led2_toggle(void)
{HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);
}
led.h程序
#ifndef __LED_H__
#define __LED_H__void led_init(void);
void led1_on(void);
void led1_off(void);
void led1_toggle(void);
void led2_on(void);
void led2_off(void);
void led2_toggle(void);#endif
pwm.c程序
#include pwm.hTIM_HandleTypeDef pwm_handle {0};
// init函数
void pwm_init(uint16_t arr, uint16_t psc)
{TIM_OC_InitTypeDef pwm_config {0};pwm_handle.Instance TIM4;pwm_handle.Init.Prescaler psc;pwm_handle.Init.Period arr;pwm_handle.Init.CounterMode TIM_COUNTERMODE_UP;HAL_TIM_PWM_Init(pwm_handle);pwm_config.OCMode TIM_OCMODE_PWM1;//指定定时器工作模式1pwm_config.Pulse arr/2;//CCR初值pwm_config.OCPolarity TIM_OCPOLARITY_LOW;//有效电平HAL_TIM_PWM_ConfigChannel(pwm_handle, pwm_config, TIM_CHANNEL_3);//通道3HAL_TIM_PWM_Start(pwm_handle, TIM_CHANNEL_3);
}//msp函数
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{if(htim-Instance TIM4)//判断是否为TIM4{GPIO_InitTypeDef gpio_initstruct;//打开时钟__HAL_RCC_GPIOB_CLK_ENABLE();//GPIO口时钟 // 使能GPIOB时钟__HAL_RCC_TIM4_CLK_ENABLE();//TIM4时钟//调用GPIO初始化函数gpio_initstruct.Pin GPIO_PIN_8; // 两个LED对应的引脚gpio_initstruct.Mode GPIO_MODE_AF_PP; // 推挽输出gpio_initstruct.Pull GPIO_PULLUP; // 上拉gpio_initstruct.Speed GPIO_SPEED_FREQ_HIGH; // 高速HAL_GPIO_Init(GPIOB, gpio_initstruct);}
}//修改CCR值的函数
void pwm_compare_set(uint16_t val)
{__HAL_TIM_SET_COMPARE(pwm_handle, TIM_CHANNEL_3, val);
}
pwm.h程序
#ifndef __PWM_H__
#define __PWM_H__#include sys.hvoid pwm_init(uint16_t arr, uint16_t psc);
void pwm_compare_set(uint16_t val);#endif
3.实物效果
硬件模块接线 LED1正—VCC LED1负—PB8 ST-Link下载方式实验现象 使用定时器4通道3生成PWM波控制LED1实现呼吸灯。 频率2kHzPSC71ARR499 LED1连接STM32F103的PB8管脚通过产品手册可知其在定时器4通道3。 定时器输出PWM实现呼吸灯实验keil源文件