1 程序分享
main.c文件。
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "usart.h"
#include "key.h"
#include "tim.h"
#include "pwm.h"
#include "stdio.h"
int main(void)
{
RCC->APB2ENR |= (uint32_t)0x00000010;//打开GPIOC时钟
GPIOC->CRH &= (uint32_t)0xFF0FFFFF;//使用前清零
GPIOC->CRH |= (uint32_t)0x00300000;//配置PC13为推挽输出,最大速度50MHz
Delay_Init();//延时初始化
Usart_Init(115200);//串口初始化
PWM_Init(899,0); //(899+1)*(0+1)/72000000hz = 0.0000125s 换成频率为80khz
TIM_SetCompare1(TIM3,100);//设置PWM占空比
printf("hello world!\r\n");
while(1)
{
Delay_ms(10);
}
}
pwm.c文件。
#include "stm32f10x.h"
#include "pwm.h"
void PWM_Init(uint16_t per,uint16_t psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;//定义定时器的结构体
GPIO_InitTypeDef GPIO_InitStruct; //定义GPIO的结构体
TIM_OCInitTypeDef TIM_OCInitStruct; //定义输出比较结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//打开GPIOA的时钟、复用时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//打开定时器3时钟
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6; //PA6
GPIO_InitStruct.GPIO_Speed =GPIO_Speed_50MHz;//速度为50mhz
GPIO_Init(GPIOA, &GPIO_InitStruct);//对PA6引脚进行初始化
TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//1分频
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
TIM_TimeBaseInitStruct.TIM_Period = per; //自动装载值
TIM_TimeBaseInitStruct.TIM_Prescaler = psc;//预分频值
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);//对TIM3进行初始化
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1; //PWM1模式
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCNPolarity_Low;//输出比较极性低
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//输出状态使能
TIM_OCInitStruct.TIM_Pulse = 0;//初始化占空比为0
TIM_OC1Init(TIM3, &TIM_OCInitStruct);//输出比较初始化
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);//输出比较1预装载寄存器使能
TIM_Cmd(TIM3,ENABLE);//TIM3使能
}
pwm.h文件。
#ifndef __PWM_H
#define __PWM_H
#include "stm32f10x.h"
void PWM_Init(uint16_t per,uint16_t psc);
#endif
2 逻辑分析仪调试
当使用语句时,TIM_SetCompare1(TIM3,100)
,波形如下图所示。
当使用语句时,TIM_SetCompare1(TIM3,450)
,波形如下图所示。
当使用语句时,TIM_SetCompare1(TIM3,899)
,波形如下图所示。
当使用语句时,TIM_SetCompare1(TIM3,900)
,波形就是一条直线啦。