OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4507|回复: 3

USART傳資料問題請教

[复制链接]

20

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
308
金钱
308
注册时间
2013-11-6
在线时间
23 小时
发表于 2014-3-28 16:55:29 | 显示全部楼层 |阅读模式

        請問我用USART1 發射陣列USART1_TX_buf[64]的資料到另一台USART1接收
        但接收只有收到9個資料。
        我使用的碼是用原子大大的去改。
        程式碼如下: 請各位大大協助,謝謝

接收端程式:

 void USART1_Receive_Data(u8 *buf)
{
 u8 rxlen;
 u8 i=0;
 delay_ms(10);
 rxlen=USART1_RX_CNT;        <=====只有9而不是64,
 if(rxlen==USART1_RX_CNT&&rxlen)
 {
  for(i=0;i<rxlen;i++)
  {
   buf=USART1_RX_BUF;
  }
  USART1_RX_CNT=0;
 }
}
void USART1_IRQHandler(void)
{
 u8 res=0;
  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
 {
  res =USART_ReceiveData(USART1);
  if(USART1_RX_CNT<64)
  {
   USART1_RX_BUF[USART1_RX_CNT]=res;
   USART1_RX_CNT++;
  }
  check_flag=1;
 }
}

發射端程式

void USART1_Send_Data(u8 *buf,u8 len)
{
 u8 t;
  for(t=0;t<len;t++)
 {
  while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
  USART_SendData(USART1,buf[t]);
 }

 while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
 USART1_RX_CNT=0;
}

void Data_Init(void)
{
USART1_TX_all[0]=0xCA;
 USART1_TX_all[1]=0x55;
 USART1_TX_all[2]=aSendSpeed;
 USART1_TX_all[3]=aManualTest;
 USART1_TX_all[4]=aOpenMaxMinSet[0]/256;
 USART1_TX_all[5]=aOpenMaxMinSet[0]%256;
 USART1_TX_all[6]=aOpenMaxMinSet[1]/256;
 USART1_TX_all[7]=aOpenMaxMinSet[1]%256;
 USART1_TX_all[8]=aLaserLampSet;
 USART1_TX_all[9]=aBuckleDelaySet/256;
 USART1_TX_all[10]=aBuckleDelaySet%256;
 USART1_TX_all[11]=aKeyboardlockSet;
 USART1_TX_all[12]=aBuckleSizeSet;
 USART1_TX_all[13]=aAirCheckSet;
 USART1_TX_all[14]=aBuckleCheckSet;
 USART1_TX_all[15]=aCountSet;
 USART1_TX_all[16]=aCountValue/256;
 USART1_TX_all[17]=aCountValue%256;
 USART1_TX_all[18]=aBuzzer;
 USART1_TX_all[19]=lContinuousSwitch;
 USART1_TX_all[20]=lArmSensorCT/256;
 USART1_TX_all[21]=lArmSensorCT%256;
 USART1_TX_all[22]=lBucklelastSize/256;
 USART1_TX_all[23]=lBucklelastSize%256;
 USART1_TX_all[24]=lStepMotorSS/256;
 USART1_TX_all[25]=lStepMotorSS%256;
 USART1_TX_all[26]=lOverTimeSet/256;
 USART1_TX_all[27]=lOverTimeSet%256;
 USART1_TX_all[28]=aLaserLampOF;
 USART1_TX_all[29]=lBuckleCheckDelay/256;
 USART1_TX_all[30]=lBuckleCheckDelay%256;
 USART1_TX_all[31]=checksum/256;
 USART1_TX_all[32]=checksum%256;
 USART1_Send_Data(USART1_TX_all,33);

}
bound=9600;

void uart_init(u32 bound)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 USART_InitTypeDef USART_InitStructure;
 NVIC_InitTypeDef NVIC_InitStructure;
 //USART CLK 致能, GPIO CLK 致能 , 復用CLK致能
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);
     //USART1_TX   PA.9
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

    //USART1_RX   PA.10
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  //USART1 NVIC中斷配置
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;   //對應中斷通道
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ; //優先級3
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //子優先級3

 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  //致能IRQ通道
 NVIC_Init(&NVIC_InitStructure);                   //中斷優先配置

 USART_InitStructure.USART_BaudRate = bound;        //波特率設置
 USART_InitStructure.USART_WordLength = USART_WordLength_8b;  //字長為8位元
 USART_InitStructure.USART_StopBits = USART_StopBits_1;      //1個停止位
 USART_InitStructure.USART_Parity = USART_Parity_No;         //無奇偶校驗位
 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //無硬體數據流控制
 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;  //收發模式

 USART_Init(USART1, &USART_InitStructure);   //初始化串口
 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);   //開啟中斷
 USART_Cmd(USART1, ENABLE);                       //致能串口
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-3-28 18:45:51 | 显示全部楼层
回复【楼主位】ChrisLiu1017:
---------------------------------
你先用串口助手接收下,看看數據有沒有少。
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

20

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
308
金钱
308
注册时间
2013-11-6
在线时间
23 小时
 楼主| 发表于 2014-4-2 09:33:30 | 显示全部楼层
請問要怎麼用串口助手看,
我只會用printf ,用USART_SendData(USART1,buf[t]);
串口可以看到嗎?
回复 支持 反对

使用道具 举报

20

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
308
金钱
308
注册时间
2013-11-6
在线时间
23 小时
 楼主| 发表于 2014-4-2 09:51:56 | 显示全部楼层
我發射端陣列資料有64筆,但接收端只接收到9筆,
我看原子的原碼陣列可以放到64筆資料。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-12 19:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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