打印

stm32f103zet6的串口出错

[复制链接]
1709|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
oliver123|  楼主 | 2013-8-30 11:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有用过stm32f103zet6的朋友吗?我用的时候,发送有问题,发送一个字符后就进入了Default_Handler这里了,不知道什么原因?有用过的朋友碰到这样的问题吗?每次只发送一个字符。
程序:
void uart2_send(u8 c)
{
        FlagStatus sta;
        USART_SendData(USART2, (u8) c);
        // USART2->DR = (u8) c;
    /* Loop until the end of transmission */
    while((sta=MyUart_GetFlagStatus(USART_FLAG_TXE))== RESET)
    {    }
}
沙发
oliver123|  楼主 | 2013-8-30 11:25 | 只看该作者
单单只是串口2出现这样的问题,其它的1,3,4都很正常。配置代码都是一样的。

使用特权

评论回复
板凳
haov000| | 2013-8-30 11:47 | 只看该作者
就这几句代码看不出哪的问题吧

使用特权

评论回复
地板
oliver123|  楼主 | 2013-8-30 14:01 | 只看该作者
找到问题了,Default_Handler是定义了中断但是没有重写就会进来。问题出在这里。
下面是我找到的一点资料,希望对有碰到类似这样问题的人有用。
=================================================================
定义了Default_Handler, 这个是作为其他所有中断的默认处理函数,作用就是死循环,所以你假如开启了某个中断,请按照这里面的中断函数名给它写中断
处理函数,例如串口中断处理函数名是 USART1_IRQHandler,你开了串口中断,如果不重写USART1_IRQHandler,就默认执行Default_Handler,死循环了。而如
果你有重写,那么中断向量表中的处理函数的地址就会更新为你自己写的那个函数的地址了。为什么会这样呢?因为此文件的末尾用了类似这样的语句:

    .weak    USART1_IRQHandler
    .thumb_set USART1_IRQHandler,Default_Handler
它给中断处理函数提供了弱(weak)别名(Default_Handler),如果不重写,中断了默认执行Default_Handler,如果重写了,因为是弱别名,所以会被你写的同名
函数覆盖。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

33

帖子

0

粉丝