定时器
1.新建工程(stm32)
芯片选择stm32f103c8
2.配置RCC
3.配置sys
4.配置IO
5.配置定时器2
6.配置定时器3
6.配置中断
7.生成工程文件
8.代码编写
启动定时器
HAL_TIM_Base_Start_IT(&htim2);
HAL_TIM_Base_Start_IT(&htim3);
在main.c中定义STM32需要给上位机发送的消息
uint8_t hello[20]="hello windows!\r\n";
定时器中断回调函数
```c
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
static uint32_t time_cnt =0;
static uint32_t time_cnt3 =0;
if(htim->Instance == TIM2)
{
if(++time_cnt >= 400)
{
time_cnt =0;
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1);
}
}
if(htim->Instance == TIM3)
{
if(++time_cnt3 >= 1000)
{
time_cnt3 =0;
HAL_UART_Transmit(&huart1,hello,20,100000);
}
}
}
8.生成烧录演示
PWM练习
1.新建工程,进行配置
参照本次作业1
打开外部时钟,点击“System Core”,选择RCC,在右侧弹出的菜单栏中选择“Crystal/Ceramic Resonator”。
选择调试接口,点击“System Core”,选择RCC。,在右侧弹出的菜单栏中选择“Serial Wire”。
2.配置定时器3
3.配置定时器4
4.时钟配置
5.生成工程文件
6.代码编写
定义一个变量,用来存储占空比
uint16_t duty_num = 10;
开始TIM3,TIM4
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_2);
位置3,每隔50毫秒,占空比加10,如果超过500(也就是PWM周期),自动变成0
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_Delay(50);
duty_num = duty_num + 10;
if(duty_num > 500)
{
duty_num = 0;
}
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,duty_num);
}
7.生成文件烧录演示