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

串口发送中断问题

[复制链接]
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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版