企业网站需要备案吗/云计算培训费用多少钱
这个是用来控制她是输入捕获还是输出比较的,咱们pwm就是输出比较。
所以要写的位有这几个:
一般置pwm即可
一般置1,为了安全,无法立即写入
ccer的这个寄存器也是有用的
这个是设置输出是高电平有效还是低电平有效
和这个搭配着看,比如当cnt小于ccr1,110的时候是高电平,然后cc1p设置为0,oc1高有效,向上计数的话,那就是先亮再灭。
http://www.360doc.com/content/14/1211/10/6828497_432083097.shtml 看这篇文章即可
这就是他的原理图,我们说的oc1ref和真正的输出oc1不一样
重大问题,关于tim2重映射到pb3不起作用的问题解决
完全重映射到pb3为什么不起用呢?
因为没有关闭JTDI和JTDO
加上下面代码就可以:
RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO, ENABLE);
AFIO->MAPR&=0XF8FFFFFF;
AFIO->MAPR|=0X04000000;
如果同时开启默认的复用功能(USART3_TX)和重映射后的复用功能(TIM2_CH3)的时钟,外设功能会产生冲突,造成工作异常的情况。
这两句代码就是把它之前的默认的usart禁用掉,这样就可以了。
禁用的是这俩
#include "stm32f10x.h"/*
尝试设置tim2输出pwm在pb0的基础上,同时添加pb1通过tim2定时器中断来点亮
需要设置的有:tim,rcc,gpio,nvic,tim_pwm
2020.7.29如果只是pwm,似乎不用设置nvic,尝试一下
*/
void delay_ms(unsigned int i)
{while(i--);
}void TIM(uint16_t pre, uint16_t cnt);
int main(void)
{unsigned int i=0; unsigned int fx=0; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); TIM(71, 500);while(1){if(fx==0){i++;if(i==300){fx=1;}}else{i--;if(i==0){fx=0;}}TIM_SetCompare2(TIM2,i); //i值最大可以取499,因为ARR最大值是499.delay_ms(100000); }return 0;
}void TIM(uint16_t pre, uint16_t cnt)
{GPIO_InitTypeDef GPIO_InitStruct; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_OCInitTypeDef TIM_OCInitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);AFIO->MAPR&=0XF8FFFFFF;
AFIO->MAPR|=0X04000000;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; //读取的时候是一下readoutput,为啥input也行?GPIO_Init(GPIOB, &GPIO_InitStruct);TIM_TimeBaseInitStructure.TIM_Period=cnt; //自动装载值TIM_TimeBaseInitStructure.TIM_Prescaler=pre; //分频系数TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //设置向上计数模式TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure); GPIO_PinRemapConfig(GPIO_FullRemap_TIM2, ENABLE);TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
// TIM_OCInitStructure.TIM_Pulse = 10;TIM_OC2Init(TIM2,&TIM_OCInitStructure); //输出比较通道1初始化TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable); //使能TIMx在 CCR1 上的预装载寄存器TIM_ARRPreloadConfig(TIM2,ENABLE);//使能预装载寄存器TIM_Cmd(TIM2,ENABLE); //使能定时器
}