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

串口发送中断问题

[复制链接]
zhangyue1994 提问时间:2019-10-17 15:45 /
求大老解惑,我想把{0x7e,0x00,0x01,0x02,0x03}这个数组通过串口中断发送出去,首字节0x7e直接通过查询法输出,其他字节通过中断方法发出去。程序代码如下,但是在上位机中只能显示0x7e,其他数据没传过来,不知道是什么原因。本人菜鸟一枚,求大腿帮小弟一把,万分感谢

extern uint8_t TxBuffer1[5] = {0x7e,0x00,0x01,0x02,0x03};//定义一个传送buffer

extern uint8_t RxBuffer1[];

extern uint8_t Txcounter = 0;//定义传送长度

void main(void)
{
  /* CLK configuration -----------------------------------------*/
  CLK_Config();

  /* UART configuration -----------------------------------------*/
  UART1_Config();  

UART1_Send_Data(TxBuffer1[0]);


  while (1)
  {

  }
}

void UART1_Config(void)
{
  /* Deinitializes the UART1 and UART3 peripheral */
    UART1_DeInit();
    //UART3_DeInit();
    /* UART1 and UART3 configuration -------------------------------------------------*/
    /* UART1 and UART3 configured as follow:
          - BaudRate = 9600 baud  
          - Word Length = 8 Bits
          - One Stop Bit
          - No parity
          - Receive and transmit enabled
          - UART1 Clock disabled
     */
    /* Configure the UART1 */
    UART1_Init((uint32_t)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO,
                UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);

    /* Enable UART1 Transmit interrupt*/
    UART1_ITConfig(UART1_IT_TXE, ENABLE);  

    /* Enable general interrupts */
    enableInterrupts();   
}

INTERRUPT_HANDLER(UART1_TX_IRQHandler, 17)
{
   if(UART1_GetITStatus(UART1_IT_TXE) != RESET)

      UART1_ClearITPendingBit(UART1_IT_TXE);

    UART1_SendData8(TxBuffer1[Txcounter]);

    Txcounter++;

    if(Txcounter == 5)
    {
        UART1_ITConfig(UART1_IT_TXE, DISABLE);
    }
}



收藏 评论5 发布时间:2019-10-17 15:45

举报

5个回答
wenyangzeng 回答时间:2019-10-17 17:37:23
楼主为何如此处理发送?
要么全部中断发送,要么全部查询发送。
慎微 回答时间:2019-10-18 08:55:55
中断不是处理数据发送之处,为何这么多工程师不晓得呢?中断处理的基本要求是简单,够快,及时清理。
butterflyspring 回答时间:2019-11-5 12:09:44
大体上逻辑没什么问题,运行的结果就是前面多了个7e。1.你先发送7e,但是你中断中先取的值还是7e。 2. 用示波器检查一下波特率对不对。3. 如果使用外部晶振(当然产品也应该使用),注意配置波特率时,外部晶振值HSE_VALUE是预先定义的,不是自动检测计算的。  希望能帮到你

评分

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

查看全部评分

qiangtech 回答时间:2019-11-5 15:03:53
UART1_ClearITPendingBit(UART1_IT_TXE);

这里不应该是ClearFlag吗
butterflyspring 回答时间:2019-11-5 17:19:32
两个函数差不多,只是判断条件一个是通过中断使能条件,另一个通过标志位置位判断。只要应用逻辑符合设定中断就是一样的。
STM8S CLEAR PENDING BIT.PNG
STM8S CLEAR UART2FLAG.PNG

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版