1、推挽输出:使用一对参数相同的功率三极管或MOSFET管,以推挽方式存在于电路中。2、单端输出:于线路架构简单,放大波型完整,以一个正弦波输入可以获得一整个正弦波输出,以音响系统来说极为理想。
//定时器3中断服务程序
void TIM3_IRQHandler(void)
{
if(TIM3->SR&0X0002)
{
TIM3->SR&=~(1<<1);
LED1=~LED1;
LED0=~LED0;
// TIM3->CNT=0; //注意这里不能直接置0,如果直接置零,而不作些比较的话,灯就只会亮,而不闪烁,因为只进行一次翻转比较,所以灯只做了一次取反
TIM3->CCR1=TIM3->CCR1+10000;
if(TIM3->CNT==60000)
{
TIM3->CNT=0;
TIM3->CCR1=10000;
}
}
}
//在输出比较模式下,
//预装载寄存器的内容被复制到影子寄存器中,
//然后影子寄存器的内容和计数器进行比较。
void Timerx_Init()
{
RCC->APB1ENR|=0x02; //开启时钟
TIM3->ARR=0xffff; //设定计数器自动重装值
TIM3->PSC=7199; //预分频器7200,得到10Khz的计数时钟,//CK_CNT=Fck_psc/([15:0]+1)
TIM3->CR1&=0<<4; //计数器向上计数
TIM3->CR1|=1<<7; // 使能自动载缓冲器
TIM3->CCMR1|=0x00000030; //翻转模式//当CCR1里的值和TIMx_CNT的值相等,则翻转
TIM3->CCMR1&=0xfffffffc; //配置通道1为输出
TIM3->CCR1=2000; //预装载脉冲
TIM3->CCER&=0xfffffffc; //输出极性为低电平
TIM3->CCMR1&=0xfffffff7; //未使能预装载寄存器
TIM3->DIER|=1<<1; //允许捕获/比较中断
TIM3->CR1|=0x01; //使能计数器
TIM3->CCER|=0x01; //使能输出,信号输出到对应的输出引脚
}
//开复用映射
void AFIO_Configuration()
{
RCC->APB2ENR|=0x01;
AFIO->MAPR|=0x00000c00;
}
//配置端口
void GPIO_Configuration(void)
{
RCC->APB2ENR|=1<<4; //使能PORTC时钟
GPIOC->CRL&=0XF0FFFFFF;
GPIOC->CRL|=0X0b000000;//PC6 推挽输出
}
问题:很奇怪为什么软件可以仿真,效果和预期一样,可是到了板子却不行
解决办法: TIM3->CCR1=TIM3->CCR1+10000;
if(TIM3->CNT==60000)
{
TIM3->CNT=0;
TIM3->CCR1=10000;
}
你理解错了。stm32引脚输出不是一定要以固定频率输出(如果你需要可以通过编程实现),而是若想正确使用stm32引脚功能(不限于输出,包括输入)一定开启gpio时钟,这是外设驱动时钟,是硬件要求的,根据输入输出信号变化的快慢,这个时钟频率可以设置。所以,正确设置(这是比使用51单片机麻烦的地方)后,io管脚像51或其他单片机一样,可以一直保持低电平或高电平输出,直到程序对其状态进行改变。
以上就是关于输出推挽牛接单端方法全部的内容,包括:输出推挽牛接单端方法、如何将通用定时器配置为输出比较模式、怎么使stm32推挽输出引脚开始就是高电平等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)