打印
[STM32F1]

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

[复制链接]
236|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
两只袜子|  楼主 | 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 | 只看该作者
这个我没遇到过,但是听你描述你的串口通讯应该没问题,建议抓一下波形,看看怎么回事儿

使用特权

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

本版积分规则

1902

主题

6628

帖子

8

粉丝