zhangyue1994 发表于 2019-10-17 15:45:56

串口发送中断问题

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

extern uint8_t TxBuffer1 = {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);


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++;

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



wenyangzeng 发表于 2019-10-17 17:37:23

楼主为何如此处理发送?
要么全部中断发送,要么全部查询发送。

mikecai 发表于 2019-10-18 08:55:55

中断不是处理数据发送之处,为何这么多工程师不晓得呢?中断处理的基本要求是简单,够快,及时清理。

butterflyspring 发表于 2019-11-5 12:09:44

大体上逻辑没什么问题,运行的结果就是前面多了个7e。1.你先发送7e,但是你中断中先取的值还是7e。 2. 用示波器检查一下波特率对不对。3. 如果使用外部晶振(当然产品也应该使用),注意配置波特率时,外部晶振值HSE_VALUE是预先定义的,不是自动检测计算的。希望能帮到你:)

qiangtech 发表于 2019-11-5 15:03:53

UART1_ClearITPendingBit(UART1_IT_TXE);

这里不应该是ClearFlag吗

butterflyspring 发表于 2019-11-5 17:19:32

两个函数差不多,只是判断条件一个是通过中断使能条件,另一个通过标志位置位判断。只要应用逻辑符合设定中断就是一样的。
页: [1]
查看完整版本: 串口发送中断问题