野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11717|回复: 23

串口发送数组

[复制链接]
发表于 2016-12-13 13:07:50 | 显示全部楼层 |阅读模式
1传感器是ttl电平所以直接接单片机引脚。
2按照指令发松一串字符,没法应,大家帮我看看程序哪里有问题把!
u8 buf[1024]="AAB40500000000000000000000A001A160A7AB";
int main(void)
{
    RCC_Configuration();
    NVIC_Configuration();
    UART1_Init(9600);
    while(1)
        {
           Usart_SendString(USART1,buf);
           delay_ms(1000);
   
  }
}

u8 num;

int Rx,Usart_sta,Tx,Len,tx;
                 void USART1_IRQHandler(void)
                     {
                  if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)
                     {       
                                 USART_ClearITPendingBit(USART1, USART_IT_RXNE);       
                                 rx_buf[k] = USART_ReceiveData(USART1);
                                     k++;
                                 delay(100);
                    }
                       
                                 Print_Win_String(0,0,rx_buf,19,0);
                       
                     }
                 

回复

使用道具 举报

发表于 2016-12-13 13:10:16 | 显示全部楼层
Usart_SendString这个函数没问题吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-13 13:17:05 | 显示全部楼层
奋斗的蜗牛 发表于 2016-12-13 13:10
Usart_SendString这个函数没问题吧

没问题                              
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-13 13:24:16 | 显示全部楼层
在线等                              
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-13 13:27:58 | 显示全部楼层
E`5@%2{M3JJC06%$)I2G[B1.png 难道不是直接发送指令就可以吗?无论如何传感器都不返回数据。
回复 支持 反对

使用道具 举报

发表于 2016-12-13 14:14:05 | 显示全部楼层
校尉 发表于 2016-12-13 13:27
难道不是直接发送指令就可以吗?无论如何传感器都不返回数据。

u8 buf[1024]="AAB40500000000000000000000A001A160A7AB";
数组是不是这样用的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-13 14:16:11 | 显示全部楼层
cancore 发表于 2016-12-13 14:14
u8 buf[1024]="AAB40500000000000000000000A001A160A7AB";
数组是不是这样用的

我是要发送这一串指令,请问哪里不对?
回复 支持 反对

使用道具 举报

发表于 2016-12-13 14:18:21 | 显示全部楼层
Usart_SendString 能贴上这个函数看下吗
回复 支持 反对

使用道具 举报

发表于 2016-12-13 14:21:52 | 显示全部楼层
校尉 发表于 2016-12-13 14:16
我是要发送这一串指令,请问哪里不对?

你搞清楚是发送字符串还是十六进制指令啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-13 14:23:12 | 显示全部楼层
wqy_1000 发表于 2016-12-13 14:18
Usart_SendString 能贴上这个函数看下吗

static void Usart_SendByte( USART_TypeDef * pUSARTx, u8 ch )
{
        /* 发送一个字节数据到USART1 */
        USART_SendData(pUSARTx,ch);
               
        /* 等待发送完毕 */
        while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);       
}

void Usart_SendString( USART_TypeDef * pUSARTx, u8 *str)
{
        unsigned int k=0;
    do
    {
        Usart_SendByte( pUSARTx, *(str + k) );
        k++;
                          
    } while(*(str + k)!='\0');
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-13 14:24:22 | 显示全部楼层
cancore 发表于 2016-12-13 14:21
你搞清楚是发送字符串还是十六进制指令啊

是十六进制指令
回复 支持 反对

使用道具 举报

发表于 2016-12-13 14:25:24 | 显示全部楼层
你现在这样发送的是字符串
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-13 14:26:35 | 显示全部楼层
fire 发表于 2016-12-13 14:25
你现在这样发送的是字符串

每两个前面加上0x再用逗号区分开可以吗
回复 支持 反对

使用道具 举报

发表于 2016-12-13 14:27:23 | 显示全部楼层
校尉 发表于 2016-12-13 14:24
是十六进制指令

,A的十六进制是啥,转换成十六进制的数再发送
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-13 14:29:43 | 显示全部楼层
校尉 发表于 2016-12-13 14:26
每两个前面加上0x再用逗号区分开可以吗

说错了,是每一个前面加上0x0  第一个是0x0A
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-13 14:35:54 | 显示全部楼层
吕一瑾 发表于 2016-12-13 14:27
,A的十六进制是啥,转换成十六进制的数再发送

A本身就是十六进制,0x0A   
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-13 14:44:16 | 显示全部楼层
fire 发表于 2016-12-13 14:25
你现在这样发送的是字符串

   while(1)
        {
           USART_SendData(USART1,0xAA);
                while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
                 USART_SendData(USART1,0xB4);
                while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
                 USART_SendData(USART1,0x04);
                while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
                 USART_SendData(USART1,0x00);
                while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
                 USART_SendData(USART1,0x00);
                while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
                 USART_SendData(USART1,0x00);
                while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
                 USART_SendData(USART1,0x00);
                while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
                 USART_SendData(USART1,0x00);
                while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
                 USART_SendData(USART1,0x00);
                while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
                 USART_SendData(USART1,0x00);
                while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
                 USART_SendData(USART1,0x00);
                 while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
                 USART_SendData(USART1,0x00);
                 while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
                 USART_SendData(USART1,0x00);
                 while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
                 USART_SendData(USART1,0x00);
                 while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
                 USART_SendData(USART1,0x00);
                 while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
                 USART_SendData(USART1,0xFF);
                 while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
                 USART_SendData(USART1,0xFF);
                 while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
                 USART_SendData(USART1,0x02);
                 while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
                 USART_SendData(USART1,0xAB);
                 while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
          delay_ms(1000);
火哥 这样发送对吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-13 14:45:04 | 显示全部楼层
cancore 发表于 2016-12-13 14:21
你搞清楚是发送字符串还是十六进制指令啊

大神,帮我看看楼下那样发送对吗
回复 支持 反对

使用道具 举报

发表于 2016-12-13 14:55:36 | 显示全部楼层
本帖最后由 wqy_1000 于 2016-12-13 15:11 编辑

u8 buf[1024]={0xAA,0xB4,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x01,0xA1,0x60,0xA7,0xAB};

for(i=0; i<19, i++)
{USART_SendData(USART1,buf);
while( USART_GetFlagStatus(USARTx,USART_FLAG_TC)!= SET);  
}




回复 支持 反对

使用道具 举报

发表于 2016-12-13 15:14:31 | 显示全部楼层
wqy_1000 发表于 2016-12-13 14:55
u8 buf[1024]={0xAA,0xB4,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x01,0xA1,0x60,0 ...

数组的地址偏移得加上,不然每次都发0XAA
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-13 15:19:19 | 显示全部楼层
wqy_1000 发表于 2016-12-13 14:55
u8 buf[1024]={0xAA,0xB4,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x01,0xA1,0x60,0 ...

谢谢你                                 
回复 支持 反对

使用道具 举报

发表于 2016-12-13 16:31:01 | 显示全部楼层
wqy_1000 发表于 2016-12-13 14:55
u8 buf[1024]={0xAA,0xB4,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x01,0xA1,0x60,0 ...

这就是大神!666
回复 支持 反对

使用道具 举报

发表于 2016-12-13 21:03:33 | 显示全部楼层
传感器 是TTL电平 ?
是差分信号吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-14 19:04:02 | 显示全部楼层
myWF 发表于 2016-12-13 21:03
传感器 是TTL电平 ?
是差分信号吧

ttl 跟485都行
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-13 19:51 , Processed in 0.061781 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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