在原子的例程基础上,修改程序如下,能够实现42步进电机的动态调频,而且能把输出的脉冲数显示在usart hmi串口屏上:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "pwm.h"
#include "timer.h"
#include "usart.h"
//ALIENTEK Mini STM32开发板范例代码8
//PWM输出实验
//技术支持:
www.openedv.com
//广州市星翼电子科技有限公司
extern u8 TIM2CH1_CAPTURE_STA; //输入捕获状态
extern u16 TIM2CH1_CAPTURE_VAL; //输入捕获值
int main(void)
{
int temp=0;
u16 led0pwmval=0;
u8 dir=1;
u16 arr=8999;
delay_init(); //延时函数初始化
LED_Init(); //初始化与LED连接的硬件接口
TIM1_PWM_Init(8999,0);//不分频。PWM频率=72000/(899+1)=80Khz
TIM2_Cap_Init(0XFFFF,72-1); //以1Mhz的频率计数
uart_init(115200); //9600
LED1=0;
while(1)
{
TIM1->ARR=arr;
arr=arr+10;
if(arr>=9999)arr=8999;
delay_ms(10);
TIM_SetCompare1(TIM1,(arr+1)/2);
if(dir)led0pwmval++;
else led0pwmval--;
if(led0pwmval>300)dir=0;
if(led0pwmval==0)dir=1;
if(TIM2CH1_CAPTURE_STA&0X80)//成功捕获到了一次高电平
{
temp=temp+1; //得到总的高电平时间
printf("n1.val=%dxffxffxff",temp);
TIM2CH1_CAPTURE_STA=0; //开启下一次捕获
}
if(temp==1000)
{
LED1=!LED1;
temp=0;
}
}
}
问题是程序中红 {MOD}字体部分,似乎跟功能毫无关系,为什么删去之后,程序就不能正常工作?我实在想不明白,请大神解释下
我没有环境,我先验证下PWM发出来是否正常,我加你微信了
一周热门 更多>