[STM32F1] USART_SendData函数

[复制链接]
2795|7
 楼主| sunwave 发表于 2016-12-21 12:59 | 显示全部楼层 |阅读模式
大家帮我看看下面的程序有什么问题?
1.Lcd_Icon( 0x0200, 0x0002 );运行正常
2.Lcd_Icon( 0x0201, 0x0004 );程序就乱了,单步进去发现是停在USART_SendData(USART2, buf[t]);这个语句很长时间,然后好像是很多变量都复位清零,可能是看门狗的原因。为什么会停止在这个语句很长时间,就是鼠标变成沙漏形状一段时间。
3、void Usart2_Send_Data(u8 *buf, u8 len)
{        u8 t;
        for(t=0;t<len;t++)   //Ñ­»··¢ËÍÊý¾Ý
        {
               
                USART_SendData(USART2, buf[t]);
                while(USART_GetFlagStatus(USART2,USART_FLAG_TC) == RESET){}
               
        }
}
 楼主| sunwave 发表于 2016-12-21 13:00 | 显示全部楼层
少贴了个函数,
void Lcd_Icon( u16 DataAdd, u16 Strbuff )
{
        Iconswitch[4] = (u8)(DataAdd>>8);
        Iconswitch[5] = (u8)DataAdd;
        Iconswitch[6] = (u8)(Strbuff>>8);
        Iconswitch[7] = (u8)Strbuff;
       
        Usart2_Send_Data((u8*)Iconswitch, 8);
}
其中        Iconswitch[0] -        Iconswitch[4]在初始化程序中初始化好了,这里不改动
mmuuss586 发表于 2016-12-21 14:19 | 显示全部楼层
你可以先把看门狗关了,测试这段语句,花了多长时间;

正常的话,你根据波特率可以算出大概花多长时间;
mmuuss586 发表于 2016-12-21 14:20 | 显示全部楼层
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
另外有没有发送完成,我用这句;
 楼主| sunwave 发表于 2016-12-21 15:31 | 显示全部楼层
mmuuss586 发表于 2016-12-21 14:19
你可以先把看门狗关了,测试这段语句,花了多长时间;

正常的话,你根据波特率可以算出大概花多长时间; ...

看门狗关了,还是不行
mmuuss586 发表于 2016-12-21 17:26 | 显示全部楼层
sunwave 发表于 2016-12-21 15:31
看门狗关了,还是不行

判断有没有发送完的程序也换了吗?
 楼主| sunwave 发表于 2016-12-21 19:26 | 显示全部楼层
mmuuss586 发表于 2016-12-21 17:26
判断有没有发送完的程序也换了吗?

换过了,还是不行
 楼主| sunwave 发表于 2016-12-21 21:08 | 显示全部楼层
查出来问题了,是完全不相干的地方,都不好意思说出来,用了一个预编译指令,跳错地方了,谢谢各位。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

154

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部