完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我的目的是控制私人服务器电机。 因为大多数伺服电机都是用脉冲控制的。 因此,如果涉及电机的加速和减速,每个脉冲之间的间隔可能不同。 因此,每次中断定时器时,下一个定时器的进入时间都会改变。 在 STM32 中,我可以将时间变成一个列表。 然后直接导入寄存器 tiM3->ARR = tim[X]。 但是,在 XMC1302 中,不允许直接向寄存器写入数值。 但需要使用
TIMER_Stop( TIMER_0); status = TIMER_SetTimeInterval( TIMER_0, tim[ X ]); if (status == TIMER_STATUS_SUCCESS) { TIMER_Start( TIMER_0); } 这就是重置的方法。 但这种代码运行速度太慢。这显然太长了。 有没有更快的方法? |
|
相关推荐
1个回答
|
|
在 XMC1302 微控制器中,要实现每次定时器中断时都可以直接向寄存器写入数值,您需要遵循以下步骤:
1. 初始化定时器:首先,您需要初始化定时器并配置其参数,例如预分频器、计数模式等。这可以通过调用 `TIMER_Init()` 函数来完成。 ```c TIMER_Init_TypeDef timer_init; timer_init.mode = TIMER_MODE_PERIODIC; timer_init.prescaler = 1; timer_init.run_in_standby = false; TIMER_Init(TIMER_0, &timer_init); ``` 2. 设置定时器中断:接下来,您需要配置定时器中断并启用它。这可以通过调用 `NVIC_ClearPendingIRQ()` 和 `NVIC_EnableIRQ()` 函数来完成。 ```c NVIC_ClearPendingIRQ(TIMER_0_IRQn); NVIC_EnableIRQ(TIMER_0_IRQn); ``` 3. 定义定时器中断处理函数:定义一个函数,该函数将在每次定时器中断时被调用。在这个函数中,您可以根据您的需求修改定时器的参数,例如更新定时器的间隔时间。 ```c void TIMER_0_IRQHandler(void) { // 更新定时器间隔时间 uint32_t new_interval = tim[X]; TIMER_Stop(TIMER_0); status = TIMER_SetTimeInterval(TIMER_0, new_interval); if (status == TIMER_STATUS_SUCCESS) { TIMER_Start(TIMER_0); } // 其他处理... } ``` 4. 启动定时器:最后,启动定时器以开始计数。 ```c TIMER_Start(TIMER_0); ``` 通过以上步骤,您可以在 XMC1302 微控制器中实现每次定时器中断时都可以直接向寄存器写入数值。这样,您可以根据需要调整定时器的间隔时间,从而控制私人服务器电机的速度。 |
|
|
|
只有小组成员才能发言,加入小组>>
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
5508 浏览 2 评论
4081 浏览 9 评论
请问TLE5012B_E1000 启动后为什么位置不能正确获取
3595 浏览 9 评论
1207 浏览 8 评论
3500 浏览 7 评论
417浏览 2评论
250浏览 2评论
357浏览 2评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
5524浏览 2评论
如果是打开已有的dave工程,怎么查看这个工程选择的mcu型号?
421浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 02:15 , Processed in 0.796828 second(s), Total 47, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号