OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4414|回复: 1

STM32F429IGT6 在电脑上连接串口会导致单片机复位一次

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2020-6-15
在线时间
5 小时
发表于 2020-12-14 12:33:27 | 显示全部楼层 |阅读模式
1金钱
Apollo的开发板
使用Rust开发

部分代码如下

#[entry]
fn start() -> ! {
    rtt_init_print!();

    rprintln!("reset");

    let device = stm32::Peripherals::take().unwrap();
    let _core = stm32::CorePeripherals::take().unwrap();
    let rcc = device.RCC.constrain();

    let clocks = rcc.cfgr.use_hse(25.mhz()).sysclk(64.mhz()).freeze();

    let ga = device.GPIOA.split();

    let mut serial1 = serial::Serial::usart1(
        device.USART1,
        (ga.pa9.into_alternate_af7(), ga.pa10.into_alternate_af7()),
        serial::config::Config::default().baudrate(115_200.bps()),
        clocks,
    )
    .unwrap();
    serial1.listen(serial::Event::Rxne);

    stm32::NVIC::unpend(Interrupt::USART1);
    unsafe {
        stm32::NVIC::unmask(Interrupt::USART1);
    }

    rprintln!("{}", stm32::NVIC::is_enabled(Interrupt::USART1));

    free(|cs| {
        SERIAL1.borrow(cs).replace(Some(serial1));
        SERIAL1_BUF.borrow(cs).replace(Some(BytesBuffer::new()));
    });
    rprintln!("serial1 ok");

    loop {}
}

#[interrupt]
fn USART1() {
    free(|cs| {
        if let (Some(ref mut serial1), Some(ref mut serial1_buf)) = (
            SERIAL1.borrow(cs).borrow_mut().deref_mut(),
            SERIAL1_BUF.borrow(cs).borrow_mut().deref_mut(),
        ) {
            if serial1.is_rxne() {
                let b = serial1.read().unwrap();
                serial1_buf.push(b).unwrap();
            }
            match serial1_buf.check_end() {
                Some((content, length)) => {
                    for i in 0..length {
                        block!(serial1.write(content[i])).unwrap();
                    }
                    serial1_buf.clear();
                }
                None => {}
            }
        }
    });
}




每次断开再连接串口调试助手, 都会导致程序一次复位

Terminal
12:26:43.398 serial1 ok
12:26:44.426 reset     
12:26:44.426 true      
12:26:44.426 serial1 ok
12:26:45.479 reset     
12:26:45.479 true      
12:26:45.479 serial1 ok
12:26:47.301 reset     
12:26:47.301 true      
12:26:47.301 serial1 ok




请大家帮我看一看是什么原因

最佳答案

查看完整内容[请看2#楼]

解决了, 只要勾选DTR就不会导致MCU自动复位
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2020-6-15
在线时间
5 小时
 楼主| 发表于 2020-12-14 12:33:28 | 显示全部楼层
解决了, 只要勾选DTR就不会导致MCU自动复位
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-13 17:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表