中级会员
 
- 积分
- 486
- 金钱
- 486
- 注册时间
- 2019-12-6
- 在线时间
- 151 小时
|
//
int main(void)
{
uint8_t t = 0;
uint8_t i=0,c=2,dir=1;
double ht, ct, f, tpsc;
sys_cache_enable(); /* 打开L1-Cache */
HAL_Init(); /* 初始化HAL库 */
sys_stm32_clock_init(160, 5, 2, 4); /* 设置时钟, 400Mhz */
delay_init(400); /* 延时初始化 */
usart_init(115200); /* 初始化USART */
led_init(); /* 初始化LED */
gtim_timx_pwm_chy_init(10 - 1, 2000 - 1); /* 1Mhz的计数频率, 100Khz的PWM */
atim_timx_pwmin_chy_init(); /* 初始化PWM输入捕获 */
GTIM_TIMX_PWM_CHY_CCRX = 2; /* 低电平宽度2,高电平宽度8 */
while (1)
{
delay_ms(10);
t++;
if (t == 20) /* 每200ms输出一次结果,并闪烁LED1,提示程序运行 */
{ delay_ms(10);
if (g_timxchy_pwmin_sta) /* 捕获了一次数据 */
{
printf("\r\n"); /* 输出空,另起一行 */
printf("PWM PSC :%d\r\n", g_timxchy_pwmin_psc); /* 打印分频系数 */
printf("PWM Hight:%d\r\n", g_timxchy_pwmin_hval); /* 打印高电平脉宽 */
printf("PWM Cycle:%d\r\n", g_timxchy_pwmin_cval); /* 打印周期 */
tpsc = ((double)g_timxchy_pwmin_psc + 1) / 200; /* 得到PWM采样时钟周期时间 */
ht = g_timxchy_pwmin_hval * tpsc; /* 计算高电平时间 */
ct = g_timxchy_pwmin_cval * tpsc; /* 计算周期长度 */
f = (1 / ct) * 1000000; /* 计算频率 */
printf("PWM Hight time:%.3fus\r\n", ht); /* 打印高电平脉宽长度 */
printf("PWM Cycle time:%.3fus\r\n", ct); /* 打印周期时间长度 */
printf("PWM Frequency :%.3fHz\r\n", f); /* 打印频率 */
atim_timx_pwmin_chy_restart(); /* 重启PWM输入检测 */
printf("c=%d\r\n",TIM3->CCR4);
i=100*ht/ct;
if(i>=90) dir=1;
if(i==10) dir=0;
if(dir) c++;
else c--;
printf("i=%d\r\n",i);
TIM3->CCR4=c; //设置占空比
// HAL_TIM_GenerateEvent(&g_timx_handle, TIM_EVENTSOURCE_UPDATE);
}
LED1_TOGGLE(); /* LED1闪烁 */
t = 0;
}
}
}
|
|