思路
使用定时器的比较输出模式2,电平翻转模式。当计数值等于捕获比较寄存器中的值时电平发生翻转。在同时发生的中断处理函数中更新捕获比较寄存器的值。
具体实现
CubuMX:
- 新建工程,选择STM32G431RBTx,开始。
- 选择TIM4,配置模式,使能中断。
配置预分频系数、比较输出模式、捕获比较寄存器的值。
配置RCC.
- 将SYSCLK配置成80MHz.
- 配置工程信息。
Keil:
1.配置工程,点击魔术棒,选择Debug,使用CMSIS-DAP Debugger,在打开Settings选择CMSIS-DAP。
2. 在main.c加入以下函数。
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM4_Init();
//以中断的形式开启定时器4的通道1和2
HAL_TIM_OC_Start_IT(&htim4,TIM_CHANNEL_1);
HAL_TIM_OC_Start_IT(&htim4,TIM_CHANNEL_2);
while (1)
{
}
}
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
{
uint16_t count=0;
if(htim->Instance == TIM4)
{
if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_1)
{
// 获取计数值
count = __HAL_TIM_GetCounter(htim);
// 更新通道1捕获比较寄存器得值
__HAL_TIM_SET_COMPARE(htim,TIM_CHANNEL_1,count+100); // 5kHz
}
else if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_2)
{
count = __HAL_TIM_GetCounter(htim);
// 更新通道2捕获比较寄存器得值
__HAL_TIM_SET_COMPARE(htim,TIM_CHANNEL_2,count+500); // 1kHz
}
}
}
- 将程序下载到开发板,用示波器测量PA11、PA12。