你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f401rct6 寄存器配置HSE PLL作为系统时钟,系统死锁

[复制链接]
shevshy 提问时间:2024-10-17 19:26 / 未解决

loop{
        let mut cr_value =unsafe{ptr::read_volatile(register_rcc_cr).read()};
        let is_25_bit_set = (cr_value & (1 << 25)) != 0;
        let is_17_bit_set = (cr_value & (1 << 17)) != 0;
        if is_25_bit_set && is_17_bit_set{
            break;
        }
    }
    let mut cr_value =unsafe{ptr::read_volatile(register_rcc_cr).read()};
    defmt::println!("afterloop value: {:b}",cr_value);
    let register_rcc_cfgr = unsafe{(RCC_BASE as *mut RW<u32>).offset(0x08 / 4)}; // GPIOC_MODER
    let mut cfgr_sys_value = unsafe{ptr::read_volatile(register_rcc_cfgr).read()};
    // cfgr_value &= !(0b11111 << 16); // 清除第 0 个引脚的配置
    // cfgr_value |= 0b01000 << 16; // 设置为rtc_pre
    // cfgr_value &= !(0b111 << 13); // 清除第 0 个引脚的配置
    // cfgr_value |= 0b000 << 13; // 设置为rtc_apb2
    cfgr_sys_value &= !(0b111 << 10); // 清除第 0 个引脚的配置
    cfgr_sys_value |= 0b100 << 10; // 设置为rtc_apb2
    cfgr_sys_value &= !(0b11 << 0); // 清除第 0 个引脚的配置
    cfgr_sys_value |= 0b10 << 0; // 设置SYS_CLK
    cfgr_sys_value &= !(0b1111 << 4); // 清除第 0 个引脚的配置
    cfgr_sys_value |= 0b0000 << 4; // 设置SYS_CLK PRE
    unsafe{ptr::write_volatile(register_rcc_cfgr as *mut u32, cfgr_sys_value)};

具体报错如下:

ERROR probe_rs::architecture::arm::core::armv7m: The core is in locked up status as a result of an unrecoverable exception ERROR probe_rs::architecture::arm::core::armv7m: The core is in locked up status as a result of an unrecoverable exception Error: The core is locked up.

Stack backtrace: 0: <unknown> 1: <unknown> 2: hid_write 3: <unknown> 4: <unknown> 5: <unknown> 6: <unknown> 7: <unknown> 8: <unknown> 9: <unknown> 10: hid_write 11: BaseThreadInitThunk 12: RtlUserThreadStart error: process didn't exit successfully: probe-rs run --chip STM32F401RCTx target\thumbv7em-none-eabihf\debug\hello (exit code: 1)

收藏 评论2 发布时间:2024-10-17 19:26

举报

2个回答
butterflyspring 回答时间:6 小时前
楼主最好使用官方的而且现在非常流行的HAL 库,可以在官网上找到 STM32Cbue以及强大的生态系统。


在库中有相关配置的源码,感兴趣的话可以仔细研读,这样大幅度提高效率。

在32位单片机中,已经极少用户去配置寄存器了,不利于阅读和移植,并且已经有些过时了。

随着芯片不断的推陈出新,芯片越来越强大,细节无数,分工也会越来越细,使用HAL 驱动库效率更高,管理更方便。


xmshao 回答时间:6 小时前
如果你确认HSE的振荡稳定、PLL也能Ready,


建议你检查下从HSE到最终系统时钟的形成所涉及到各个参数,主要是那些分频、倍频参数,


不要配置出超出数据手册约定之外的更高时钟频率了。


你可以基于CbueMx配置生成相应代码后,你相应移植过来。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版