实验任务1
要求:
阅读学习野火开发板资料(零死角玩转stm32-中级篇、零死角玩转 STM32F103—指南者)和网上资源,熟悉
脉冲宽度调制(PWM)和数模/模数转换原理。完成以下实验:
- 用STM32F103输出一路PWM波形,建议采用定时器方法。野火和网上大多数资源采用此方法,有完整源码。用示波器观察输出波形。
操作
首先打开野火自带资料包中的这个位置
打开源程序
代码修改部分:
RCC_Config函数体
void RCC_Config(void)
{
//使能GPIOA,TIM2
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
}
GPIO_Config函数体
void GPIO_Config(void)
{
//GPIO的配置,官方库有给出需要配置的一些参数,如果忘记了,参照一下即可,我这里配置的是GPIOA_Pin_1
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
TIM_Config函数体
void TIM_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TImeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
//配置TIM2的时钟输出频率,以及其它相关参数初始化
TIM_TImeBaseStructure.TIM_Prescaler=360-1;//设置PWM的频率
TIM_TImeBaseStructure.TIM_CounterMode=0;
TIM_TImeBaseStructure.TIM_Period=100;
TIM_TimeBaseInit(TIM2,&TIM_TImeBaseStructure);
//设置PWM的输出方式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
//配置占空比
TIM_OCInitStructure.TIM_Pulse=50;
TIM_OC2Init(TIM2,&TIM_OCInitStructure);
TIM_ForcedOC1Config(TIM2,TIM_ForcedAction_Active);
TIM_Cmd(TIM2,ENABLE);
TIM_CtrlPWMOutputs(TIM2,ENABLE);
}
Main函数
int main()
{
RCC_Config();
GPIO_Config();
TIM_Config();
while(1)
{
;
}
}
设置修改
第一步先修改debug的设置
第二步打开调试,并设置并检测GPIO的输出引脚
修改为GPIOA_IDR.6
实验结果图
连接示波器,观察图像