STM32发送十六进制数据问题

2019-07-21 04:52发布


本人用stm32串口连接一个加速度计,需要发送“0xFA 0x01 0x00 0x82 0x7B”后方可使能设备,设备之后才可以
传出数据。
求原子哥,大侠帮助,不胜感激。
(程序用串口助手验证(发送的数据也可以接收到),电平也没问题,硬件连接没问题,但是始终无法激发加速度计,个人觉得是发送指令数据

格式方面有问题)
程序如下:
主函数里如下:
   uint8_t send_AHRSO[5]={0xFA,0X01,0x00,0x82,0X7B};

   USART_PutHEX(USART1,send_AHRSO[0]);
  USART_PutHEX(USART1,send_AHRSO[1]);
  USART_PutHEX(USART1,send_AHRSO[2]);
  USART_PutHEX(USART1,send_AHRSO[3]);
  USART_PutHEX(USART1,send_AHRSO[4]);


void USART_PutHEX(USART_TypeDef* USARTx,uint8_t Data)
{
  USART_SendData(USARTx, Data);
  while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==RESET);
}
  void USART1_IRQHandler(void)      //串口1 中断服务程序
{
uint32_t a;
a=0;
  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)    //判断读寄存器是否非空
  { 
    
    RxBuffer1[RxCounter1] = USART_ReceiveData(USART1);   //将读寄存器的数据缓存到接收缓冲区里
USART_PutHEX(USART1,RxBuffer1[RxCounter1]);
RxCounter1++;

if(a==0 && RxCounter1==0x10) {GPIO_SetBits(GPIOB, GPIO_Pin_5); a=1; Delay(1000000);}         //通过灯的闪烁判断是否激发了加速度计
                 
else {GPIO_ResetBits(GPIOB, GPIO_Pin_5);a=0;  }
RxCounter1 &=0x0F;
if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)                   //这段是为了避免STM32 USART 
第一个字节发不出去的BUG 
  { 
     USART_ITConfig(USART1, USART_IT_TXE, DISABLE);          //禁止
发缓冲器空中断, 
  } 
  
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
正点原子
1楼-- · 2019-07-21 06:31
 精彩回答 2  元偷偷看……
businiao2014
2楼-- · 2019-07-21 06:58
回复【2楼】正点原子:
---------------------------------
用串口助手试验了可以激发加速度计。同时也将程序烧进去,可以成功的发到串口助手,可以显示出来。
正点原子
3楼-- · 2019-07-21 10:19
回复【3楼】businiao2014:
---------------------------------
那就是正常了?
admn
4楼-- · 2019-07-21 15:08
LZ问题解决了吗
刘煜上网
5楼-- · 2019-07-21 17:53
请问楼主现在问题解决了吗,我现在也是这个问题,要发一串16进制数命令给传感器,用了和你类似的函数,在电脑通过串口调试助手数据可以显示,但是从开发板发到传感器就没有数据返回,不知道为什么
lnshd
6楼-- · 2019-07-21 18:59
 精彩回答 2  元偷偷看……

一周热门 更多>