发新帖我要提问
12
返回列表
打印
[STM32F1]

学习F103,碰到一个不科学的,有关printf的问题

[复制链接]
楼主: dai410257573
手机看帖
扫描二维码
随时随地手机跟帖
21
dai410257573|  楼主 | 2016-11-30 22:52 | 只看该作者 回帖奖励 |倒序浏览
皈依 发表于 2016-11-30 22:33
把清楚中断标志位放在if里面就可以了

还是一样的进不去if,然后就一直是在中断函数里面判断if了

使用特权

评论回复
22
皈依| | 2016-12-1 08:13 | 只看该作者
本帖最后由 皈依 于 2016-12-1 08:14 编辑
dai410257573 发表于 2016-11-30 22:52
还是一样的进不去if,然后就一直是在中断函数里面判断if了

static u8 usart1_data;
      
        if(USART_GetITStatus(USART1,USART_IT_RXNE) != Bit_RESET) //检查指定的USART中断发生与否
        {
                USART_ClearFlag(USART1,USART_FLAG_TC);
                usart1_data = USART_ReceiveData(USART1);
                USART_SendData(USART1,usart1_data);
                while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == Bit_RESET);
        }

Bit_RESET是什么?有定义吗?没定义应该是RESET另外不可能卡在中断里一直判断if的 如果if条件不满足会往后执行的,在细细的一步步的调试

使用特权

评论回复
23
dai410257573|  楼主 | 2016-12-1 22:56 | 只看该作者
皈依 发表于 2016-12-1 08:13
static u8 usart1_data;
      
        if(USART_GetITStatus(USART1,USART_IT_RXNE) != Bit_RESET) // ...

typedef enum
{ Bit_RESET = 0,
  Bit_SET
}BitAction;

例程里面是这样设定的枚举。而且这个地方如果 有问题的话,那么我初始化C口的时候,也一样会卡着这个地方。但是现在只要初始化别的,就不会卡着

使用特权

评论回复
24
dai410257573|  楼主 | 2016-12-1 22:57 | 只看该作者
本帖最后由 dai410257573 于 2016-12-1 23:01 编辑

[url=home.php?mod=space&uid=425605]@icecut   版主,能帮忙分析下吗[/url]  

使用特权

评论回复
25
icecut| | 2016-12-1 23:58 | 只看该作者
本帖最后由 icecut 于 2016-12-2 09:41 编辑
dai410257573 发表于 2016-12-1 22:57
@icecut   版主,能帮忙分析下吗[/url]

我 看了.我在其他芯片上没有遇到....当时我怀疑你用的是不是 uart 的备用引脚在端口 c 上.我也理解不了.但是别人没有提过这个问题.毕竟 uart 用的还是比较多的.

使用特权

评论回复
26
皈依| | 2016-12-2 08:16 | 只看该作者
dai410257573 发表于 2016-12-1 22:56
typedef enum
{ Bit_RESET = 0,
  Bit_SET

好吧。。。不知道你这个是哪个版本的库函数,再试试把清中断放在函数最后面
另外从硬件到软件从头细细撸一遍 肯定有问题,串口这东西用的太多了,没遇到过你这个问题

使用特权

评论回复
27
li880wert| | 2016-12-2 09:59 | 只看该作者
一看就知道你问题在哪,你开了AFIO,把AFIO 注释掉

使用特权

评论回复
28
li880wert| | 2016-12-2 10:00 | 只看该作者
li880wert 发表于 2016-12-2 09:59
一看就知道你问题在哪,你开了AFIO,把AFIO 注释掉

STM32 库使用,如果加了AFIO 时钟,函数执行开启的顺序不一样,经常会出现这样奇芭的问题

使用特权

评论回复
29
dai410257573|  楼主 | 2016-12-2 20:32 | 只看该作者
li880wert 发表于 2016-12-2 10:00
STM32 库使用,如果加了AFIO 时钟,函数执行开启的顺序不一样,经常会出现这样奇芭的问题 ...

注释掉RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);依旧是如此,跑不起来

使用特权

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

本版积分规则