2019-08-17 09:49发布
mack13013 发表于 2016-7-19 14:49 干脆你就设置一个1us的PWM输出给一个输入捕获,捕获里面计数,根据计数反转某个引脚就可以了。 硬件上仅 ...
wszdxmh 发表于 2016-7-19 16:50 [mw_shl_code=c,true]void TIM1_Init(uint16_t period, uint16_t prescaler) { TIM_TimeBaseInitTypeDe ...
wszdxmh 发表于 2016-7-20 14:22 我都是用硬件PWM做的,但是你这个用硬件PWM做不了,所以就写一软件模拟。引脚最高响应频率是50MHz,所以 ...
Y-Hanxiao 发表于 2016-7-20 14:29 达不到要求 还写。。。
最多设置5个标签!
我擦,没考虑清楚。
没法用1us进行输入捕获,因为进入中断的速度太频繁了。
那可以看看定时器的单脉冲输出模式输出一个1us,软件定时1s,
或者用一个定时器输出比如50ms,然后输入捕获计数,计数到1s之后启动另一个定时器进行单脉冲模式输出1us,估计这样精度会高一些,进入中断也不至于太频繁。就是外设用的太多了。
定时器同步一节了还有一个定时器用作另一个定时器的预分频什么的,但是这样做得在外部添加逻辑芯片进行与或非什么的组合,还不如F1换F4。
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //ê±Öóê1Äü
//¶¨ê±Æ÷TIM43õê¼»ˉ
TIM_TimeBaseStructure.TIM_Period = period; //éèÖÃÔúÏÂò»¸ö¸üDÂê¼t×°èë»î¶ˉμÄ×Ô¶ˉÖØ×°ÔؼÄ′æÆ÷ÖüÆúμÄÖμ
TIM_TimeBaseStructure.TIM_Prescaler = prescaler; //éèÖÃóÃà′×÷ÎaTIMxê±ÖóÆμÂê3yêyμÄÔ¤·ÖÆμÖμ
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIMÏòéϼÆêyÄ£ê½
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMxμÄê±¼ä»ùêyμ¥λ
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE ); //ê1ÄüÖ¸¶¨μÄTIM4ÖD¶Ï,ÔêDí¸üDÂÖD¶Ï
//ÖD¶ÏóÅÏ輶NVICéèÖÃ
NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn; //TIM1ÖD¶Ï
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; //ÏèÕ¼óÅÏ輶3¼¶
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //′óóÅÏ輶3¼¶
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μà±»ê1Äü
NVIC_Init(&NVIC_InitStructure); //3õê¼»ˉNVIC¼Ä′æÆ÷
TIM_Cmd(TIM1, ENABLE); //ê1ÄüTIMx
}
void TIM1_UP_IRQHandler(void)
{
static long a;
if(TIM_GetITStatus(TIM1, TIM_IT_Update))
{
a++;
if(a == 1000000)
a=0;
if(a<b)
led=1;
else
led=0;
TIM_ClearITPendingBit(TIM1, TIM_IT_Update); //Çå3yTIMx¸üDÂÖD¶Ï±êÖ¾
}
}
void main(void)
{
TIM1_Init(49999,1439);
led_init();
while(1);
}[/mw_shl_code]
用定时器模拟PWM,1us中断一次;改b值就可以控制占空比。
你试过吗?速度达不到,我测试这样置0置1 最快就能到2us,到不了1us。
达不到要求 还写。。。
写的时候没想到这个问题。你后面问了我才想起来。你想用STM32实现基本上是没戏了。用其他芯片吧。GPIO外设都是挂APB这个低时钟系统总线上的。
一周热门 更多>