请选择 进入手机版 | 继续访问电脑版

硬汉嵌入式论坛

 找回密码
 立即注册
查看: 641|回复: 2
收起左侧

[技术讨论] 各位大佬们串口写的打印函数在中断中出现问题

[复制链接]

6

主题

32

回帖

50

积分

初级会员

积分
50
发表于 2022-5-17 18:07:34 | 显示全部楼层 |阅读模式
image.png
如图:此函数在Main中可以正常调用.在中断接受中只能打出来一个字符串中的某个字节.
image.png
在字符串发送函数中,加延时可以正常打印.不加延时打印 只有某个字节.加了延时后在中断中直接卡死


求指导
//此函数在main中可以调用,在终端中无法使用,只能发一个字节.
void Uart_Send(uint8_t * str)
{
        uint8_t *pdata8bits = NULL;

        if(str == NULL)
        {
                        printf("usart sendbyte is null!!");
                        return;
        }
        USART1->CR1 |= USART_CR1_TE;
        pdata8bits = str;
        while((*pdata8bits) != '\0')
        {
                USART1->DR = (uint8_t)(*pdata8bits & 0xFFU);  //低字节先发送
                pdata8bits++;
//        while(!(USART1->CR1 & USART_SR_TXE_Pos));
                mSDelay(1);//如果未加发送完成检测,需要加一个短暂延时,否则会一直只发送一个字节

        }       
       
}

void USART1_IRQHandler(void)
{
    uint8_t rec_data;
    uint8_t rec[] = {"This is str"};
    if(USART1->SR & USART_SR_RXNE  ||  USART1->CR1 & USART_CR1_RXNEIE )
    {
      USART1->SR &=  ~USART_CR1_RXNEIE;
      rec_data = (uint8_t)(USART1->DR & (uint16_t)0x01FF);
        if(rec_data == 'S')
        {
         Uart_Send(rec);   
          return;                  
        }
    }        
}



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
发表于 2022-5-18 00:32:51 | 显示全部楼层
一直发,得检测下发送完成标志,即TC不标志,不要使用TEX发送空标志

while((*pdata8bits) != '\0')
        {
                USART1->DR = (uint8_t)(*pdata8bits & 0xFFU);  //低字节先发送
                pdata8bits++;
//        while(!(USART1->CR1 & USART_SR_TXE_Pos));
                mSDelay(1);//如果未加发送完成检测,需要加一个短暂延时,否则会一直只发送一个字节

        }      
回复

使用道具 举报

6

主题

32

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2022-5-19 09:26:44 | 显示全部楼层
eric2013 发表于 2022-5-18 00:32
一直发,得检测下发送完成标志,即TC不标志,不要使用TEX发送空标志

while((*pdata8bits) != '\0')

感谢,弄好了
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-3-29 14:57 , Processed in 0.268397 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表