打印

stm32f103 USART的问题

[复制链接]
2922|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bragge|  楼主 | 2008-5-15 14:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 USART_InitStructure.USART_BaudRate = 9600;
  USART_InitStructure.USART_WordLength = USART_WordLength_9b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_Even;
  USART_InitStructure.USART_HardwareFlowControl =  USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  USART_InitStructure.USART_Clock = USART_Clock_Disable;
  USART_InitStructure.USART_CPOL = USART_CPOL_Low;
  USART_InitStructure.USART_CPHA = USART_CPHA_2Edge;
  USART_InitStructure.USART_LastBit = USART_LastBit_Disable;
 USART_Init(USART1, &USART_InitStructure);
 USART_Cmd(USART1, ENABLE);
while(1)
{
  TxCounter=0;
  while(TxCounter < TxBufferSize)
  {
    USART_SendData(USART1, TxBuffer[TxCounter]);
    TxCounter++;

    /* Loop until the end of transmit */
    while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
    {
    }
  }
为什么运行第一次的话就少第一个数,后面就可以了,不明白问题出哪了,帮忙看看啊。在串口调试工具上查看的。u8 TxBuffer[] ="10212023302"; 收到的结果:30 32 31 32 30 32 33 33 30 32 00
单步的时候正常,全速就少第一个数
沙发
bragge|  楼主 | 2008-5-15 14:40 | 只看该作者

第二次的数据

31 30 32 31 32 30 32 33 33 30 32 00

使用特权

评论回复
板凳
bragge|  楼主 | 2008-5-15 15:27 | 只看该作者

检查了很多次还查不出原因

不知道是哪出错了就是查不出原因,快来一起看看啊。
他原来的测试程序怎么可以的,难道是我用的串口调试工具的原因吗?

使用特权

评论回复
地板
hkap| | 2008-5-15 17:25 | 只看该作者

你设置了偶校验,去掉偶校验或终端接收增加偶校验即可

使用特权

评论回复
5
bragge|  楼主 | 2008-5-16 08:42 | 只看该作者

4楼的办法没用

串口调试工具里怎么换奇偶校验无校验,结果都没变化的,不知道那软件是不是有什么问题呢。
我的问题是解决了  就加了一个延时程序 
 TxCounter=0;
  while(TxCounter < TxBufferSize-1)
  {
    USART_SendData(USART1, TxBuffer[TxCounter]);
    TxCounter++;
    for(x=0;x<65535;x++) ;
    /* Loop until the end of transmit */
    while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
    {
    }
延时加在最前面是不行的,加在最后面也是可以的,不知道问题的根本在哪?大家一起给分析分析

使用特权

评论回复
6
hkap| | 2008-5-16 09:02 | 只看该作者

stm32端去掉偶校验啊,这是问题根本所在

使用特权

评论回复
7
ford126| | 2008-5-17 01:40 | 只看该作者

同问?

使用特权

评论回复
8
llyygg1971| | 2008-5-17 08:26 | 只看该作者

用下面的就可以了

while(TxCounter < TxBufferSize-1)
{
  while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) { }
  USART_SendData(USART1, TxBuffer[TxCounter]);
  TxCounter++;
}
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) { }

使用特权

评论回复
9
chunfeng12| | 2008-5-17 17:37 | 只看该作者

看看这个办法行不

while(TxCounter < TxBufferSize-1)
  {
    USART_SendData(USART1, TxBuffer[TxCounter]);
    TxCounter++;
    while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
  }
    

使用特权

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

本版积分规则

15

主题

45

帖子

0

粉丝