4630|8

69

帖子

0

TA的资源

一粒金砂(初级)

stm32f103USART的问题 [复制链接]

 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
单步的时候正常,全速就少第一个数
此帖出自stm32/stm8论坛

最新回复

                                 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);  }       详情 回复 发表于 2008-5-17 17:37

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

第二次的数据

                                 31 30 32 31 32 30 32 33 33 30 32 00
此帖出自stm32/stm8论坛

回复

78

帖子

0

TA的资源

一粒金砂(初级)

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

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

回复

75

帖子

0

TA的资源

一粒金砂(初级)

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

                                  
此帖出自stm32/stm8论坛

回复

90

帖子

0

TA的资源

一粒金砂(初级)

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)
    {
    }
延时加在最前面是不行的,加在最后面也是可以的,不知道问题的根本在哪?大家一起给分析分析
此帖出自stm32/stm8论坛

回复

65

帖子

0

TA的资源

一粒金砂(初级)

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

                                  
此帖出自stm32/stm8论坛

回复

75

帖子

0

TA的资源

一粒金砂(初级)

同问?

                                  
此帖出自stm32/stm8论坛

回复

64

帖子

0

TA的资源

一粒金砂(初级)

用下面的就可以了

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) { }
此帖出自stm32/stm8论坛

回复

69

帖子

0

TA的资源

一粒金砂(初级)

看看这个办法行不

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);
  }
    
此帖出自stm32/stm8论坛

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/10 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表