【发布时间】:2021-12-30 18:13:22
【问题描述】:
我有一个简单的代码用于保存和以后使用寄存器地址:
PWMChannel::PWMChannel(TIM_HandleTypeDef *timer, int channel)
{
switch(channel)
{
case 1: ccr = &(timer->Instance->CCR1); break;
case 2: ccr = &(timer->Instance->CCR2); break;
case 3: ccr = &(timer->Instance->CCR3); break;
case 4: ccr = &(timer->Instance->CCR4); break;
case 5: ccr = &(timer->Instance->CCR5); break;
case 6: ccr = &(timer->Instance->CCR6); break;
}
}
其中 ccr 是私有类成员: uint32_t *ccr = nullptr; 它用于像这样改变占空比:*ccr = duty;
前段时间我使用 System Workbench 时,上面的代码运行良好。最近我切换到 CubeIDE。将项目移植到新工具链的唯一问题是这个成员定义 - 它现在需要“volatile”,所以我将其更改为: volatile uint32_t *ccr = nullptr;
但是代码停止工作。调试显示,通道参数=4时,ccr值变为0x40。现在,0x40 是 CCR4 在 TIM_TypeDef 结构中的偏移量(由 Instance 引用),而不是 CCR4 的实际地址。如果这就是它应该的样子,那么为什么它以前可以工作,我该如何更改代码以使其再次工作?
【问题讨论】:
标签: stm32