打印
[STM32F1]

stm32f103c8t6串口发送大量hex数据失效。

[复制链接]
1151|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
两只袜子|  楼主 | 2024-5-6 16:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

我发送数据量为640个十六进制数据是正常的,上位机有收到书籍。但是我想发送3600个数据就一直灭有反应,不知道为啥什么,求助。我使用的是A9,A10的usart接口。以下是部分代码
#include "stm32f10x.h"                  // Device header
#include <stdio.h>
#include <stdarg.h>


void Serial_Init(void)
{
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
      
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
      
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
      
        USART_InitTypeDef USART_InitStructure;
        USART_InitStructure.USART_BaudRate = 9600;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
        USART_InitStructure.USART_Parity = USART_Parity_No;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_Init(USART1, &USART_InitStructure);
      
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
      
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
      
        NVIC_InitTypeDef NVIC_InitStructure;
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_Init(&NVIC_InitStructure);
      
        USART_Cmd(USART1, ENABLE);
}

void Serial_SendByte(uint8_t Byte)
{
        USART_SendData(USART1, Byte);
        while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}

void Serial_SendArray(uint8_t *Array, uint16_t Length)
{
        uint16_t i;
        for (i = 0; i < Length; i ++)
        {
                Serial_SendByte(Array);
        }
}


然后我定义了一个数组arra[3600],用 Serial_SendArray函数发送后没有反应

使用特权

评论回复
沙发
光辉梦境| | 2024-5-14 14:23 | 只看该作者
你可以把大数据分包发啊,这样不就OK了么

使用特权

评论回复
板凳
一秒落纱| | 2024-5-14 16:00 | 只看该作者
这个我没遇到过,但是听你描述你的串口通讯应该没问题,建议抓一下波形,看看怎么回事儿

使用特权

评论回复
地板
淡漠安然| | 2024-5-14 17:00 | 只看该作者
为啥发送3600个数据一个都收不到?

使用特权

评论回复
5
暖了夏天蓝了海| | 2024-5-14 19:00 | 只看该作者
你可以用串口模块抓一下数据的,看看是否数据发送正常啊

使用特权

评论回复
6
三生万物| | 2024-5-14 21:00 | 只看该作者
你仿真看看呗,看程序怎么执行的

使用特权

评论回复
7
远山寻你| | 2024-5-14 23:00 | 只看该作者
是不是程序都没运行成功的啊?

使用特权

评论回复
8
江河千里| | 2024-5-15 02:00 | 只看该作者
感觉是你缓冲区编译设计过大了吧?

使用特权

评论回复
9
别乱了阵脚| | 2024-5-15 04:00 | 只看该作者
改一下堆栈试试?不过我觉得才3600个数据应该无所谓吧,不需要这样

使用特权

评论回复
10
冰春彩落下| | 2024-5-15 10:00 | 只看该作者
你可以用逻辑分析仪抓一下波形,看看串口

使用特权

评论回复
11
夜阑风雨| | 2024-5-15 14:00 | 只看该作者
有可能是你的3600个数据之中有违规的数据吧,把程序搞死掉了

使用特权

评论回复
12
一秒落纱| | 2024-5-15 16:00 | 只看该作者
这个我没遇到过,但是听你描述你的串口通讯应该没问题,建议抓一下波形,看看怎么回事儿

使用特权

评论回复
13
家有两宝呀| | 2024-7-31 23:59 | 只看该作者
Serial_SendArray函数的错误
在Serial_SendArray函数中,你有一个小错误。Serial_SendByte函数接受一个字节,但你在循环中传递了一个数组指针而不是单个字节。

使用特权

评论回复
14
家有两宝呀| | 2024-7-31 23:59 | 只看该作者
修正后的代码如下

void Serial_SendArray(uint8_t *Array, uint16_t Length)
{
    uint16_t i;
    for (i = 0; i < Length; i++)
    {
        Serial_SendByte(Array[i]); // 修正这里,传递单个字节
    }
}

使用特权

评论回复
15
家有两宝呀| | 2024-7-31 23:59 | 只看该作者
数据发送速度和缓冲区
在你的代码中,你使用的是9600波特率,这对于发送大量数据可能会比较慢。如果数据发送不及时,可能会导致数据丢失。可以尝试提高波特率来提高数据传输速度。

例如,将波特率设置为115200:
USART_InitStructure.USART_BaudRate = 115200;


使用特权

评论回复
16
家有两宝呀| | 2024-7-31 23:59 | 只看该作者
USART发送的数据缓冲区是否存在溢出的可能。如果发送数据量太大且发送速度过慢,可能会导致数据丢失。通过硬件流控(如RTS/CTS)可以避免缓冲区溢出。
你的代码中没有启用流控。

使用特权

评论回复
17
flycamelaaa| | 2024-8-19 13:04 | 只看该作者
缓冲区溢出

使用特权

评论回复
18
powerantone| | 2024-8-19 13:04 | 只看该作者
波特率不匹配

使用特权

评论回复
19
stormwind123| | 2024-8-19 13:05 | 只看该作者
如果使用中断或DMA方式发送数据,配置错误(如优先级设置不当、缓冲区地址错误等)可能导致发送失败

使用特权

评论回复
20
probedog| | 2024-8-19 13:05 | 只看该作者
电源不稳定或时钟配置错误也可能影响串口通信的稳定性。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2034

主题

7335

帖子

10

粉丝