你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用STM32F030K6串口问题

[复制链接]
yinshaojie 提问时间:2018-5-19 17:12 /
本帖最后由 yinshaojie 于 2018-5-19 17:14 编辑

static void MX_USART1_UART_Init(void)
{

  huart1.Instance = USART1;
  huart1.Init.BaudRate = 19200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  huart1.AdvancedInit.OverrunDisable = UART_ADVFEATURE_OVERRUN_DISABLE;
  huart1.AdvancedInit.DMADisableonRxError = UART_ADVFEATURE_DMA_DISABLEONRXERROR;
  if (HAL_UART_Init(&huart1) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}
以上为配置文件,USART1可以接收数据但发送数据只能发送一个字节,查看ISR状态寄存器EOBF,TXE,TC寄存器都处于置位状态,不知道是什么问题?        send_buf[0] = 0x8e;                                   //Í·Âë
  send_buf[1] = 0x8e;                                   //Í·Âë
  send_buf[2] = 4;                                      //Êý¾Ý³¤¶È
       
        send_buf[3] = Tension_Notch;                          //À­Á¦µµÎ»
        send_buf[4] = Weld_time;                              //ÈÛ½ÓµµÎ»
       
        TxCheckByte = 0;
       
  for (i = 2;i < (send_buf[2] + 1);i++)
        {
    TxCheckByte =        (TxCheckByte^send_buf);
        }                       
                       
        send_buf[5] = TxCheckByte;                             //УÑéλ
       
  // HAL_UART_Transmit(&huart1,send_buf,6,0xffff);
  for (send_len_count = 0;send_len_count < (send_buf[2] + 2);send_len_count++)
  {
          USART1->TDR = send_buf[send_len_count];
    while((USART1->ISR & UART_FLAG_TC)== 0);   
  }这是发送函数

收藏 评论9 发布时间:2018-5-19 17:12

举报

9个回答
与龙共舞 回答时间:2018-5-19 17:45:38

整理一个报文 然后发出去
直接HAL_UART_Transmit(&huart1,send_buf,6,0xffff)不就可以了吗?
为啥又回到了标准库的搞法呢

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

wenyangzeng 回答时间:2018-5-19 19:40:37
二楼正解,只要1句HAL_UART_Transmit()就够了,用HAL库无需关心发送标志位等状态

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

feixiang20 回答时间:2018-5-20 02:22:42
可以参考【stm32cube中文教程2:uart串口通信,printf输出(HAL_UART_Transmit()】资料

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

yinshaojie 回答时间:2018-5-20 12:57:50
用HAL_UART_Transmit(&huart1,send_buf,6,0xffff)用这个也试了不行,也只能发送一个字节ISR状态寄存器EOBF,TXE,TC寄存器都处于置位
yinshaojie 回答时间:2018-5-21 11:27:49
没有ST的人来解答一下吗?
回答时间:2018-5-21 15:29:47
楼主是否开了发送中断?
yinshaojie 回答时间:2018-5-21 17:44:18
安 发表于 2018-5-21 15:29
楼主是否开了发送中断?

没有用发送中断,使用查询寄存器方式发送
回答时间:2018-5-22 08:22:43
没有发生过类似的问题,可能是程序的问题,检查一下for循环执行了几次。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

yinshaojie 回答时间:2018-5-24 09:51:24
最后发现是看门狗开启了但没有配置好看门狗时间引起的

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版