kylongmu 发表于 2017-8-5 13:00:53

时光虫子 发表于 2017-6-5 14:55
串口缓冲区开大点,接收和读取用环形缓冲区

接收和读取用环形缓冲区
这是关键点,你想明白了就明白。

avenbbs-241604 发表于 2017-8-8 16:01:50

int main(void)
{
...
HAL_UART_Receive_IT(&huart1, (uint8_t *)&RxByte1, 1);
...
whine(1)
{
...
}
...
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
        printf("%c",RxByte1);
        HAL_UART_Receive_IT(&huart1, (uint8_t *)&RxByte1, 1);
}

一叶清风 发表于 2018-1-5 22:55:11

学习了

a1312 发表于 2018-5-10 16:17:08

avenbbs-241604 发表于 2017-8-8 16:01
int main(void)
{
...


虽然你把每个数据都打印出来了,看起来RxByte1像是保存了不止一个数据,但实际上RxByte1里只保存1字节数据

karzn 发表于 2018-5-14 08:40:39

谢谢分享!!

xiaoouyang 发表于 2018-7-17 10:57:24

楼主能不能贴个源码上来啊 好多人遇到这样的问题了

donghuoyinzi 发表于 2018-8-14 12:27:12

不懂你在说啥

andrewsss 发表于 2018-11-13 15:35:37

/*这是开启串口中断后,串口1和串口3之间互相通信的程序,在main里写的回调函数,里面的变量都是全局变量,注意注释里说的串口发送完数据就中断,立马存到缓冲区,中断比存储要快,所以能存完串口的所有数据,在进行中断接收时,必须先开启中断接收*/

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
        //UNUSED(huart);
       
        if(huart->Instance == USART1)
        {               
                        //串口发送完数据就中断,立马存到缓冲区,中断比存储要快,所以能存完串口的所有数据
                        //然后发送完后,继续开启中断接收函数
                        RxBuffer1=RxTemp1;   
                        RxBuffer1=0;
                        RxCounter1=0;
                        HAL_UART_Transmit(&huart3,RxBuffer1,strlen(RxBuffer1),100);
                  HAL_UART_Receive_IT(&huart1,&RxTemp1,1);
               
        }
        if(huart->Instance == USART3)
        {
               

                        RxBuffer3=RxTemp3;
                        RxBuffer3=0;
                        RxCounter3=0;
                        HAL_UART_Transmit(&huart1,RxBuffer3,strlen(RxBuffer3),100);
                        HAL_UART_Receive_IT(&huart3,&RxTemp3,1);
                               
        }
}
页: 1 2 3 4 [5]
查看完整版本: 关于STM32cubemx 串口如何中断接收发来的不定长数据