OpenEdv-开源电子网

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

串口收发指令

[复制链接]

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
发表于 2019-4-29 14:16:55 | 显示全部楼层 |阅读模式
1金钱
使用串口助手发送指令,串口助手需要配置加回车换行。才能正常收发数据。为什么我在程序那边写的指令,无论加不加\n,在串口助手这边检测都没有收到数据呢?
/**定义指令****/
char UART2_Blue_Close[13] = "AT+B SCAN 0\n";

串口助手调试蓝牙.png

最佳答案

查看完整内容[请看2#楼]

今天继续用这个程序调试,在发送的字符串指令后面加上\r。居然可以正常通信了。很奇怪,之前这样试都不行,今天再试竟然通了。 //控制蓝牙指令 unsigned char UART2_Blue_ChangeName[18] = "AT+B SLDN Eacome\r"; //修改蓝牙名称 unsigned char UART2_Blue_Close[13] = "AT+B SCAN 0\r"; //关闭蓝牙 unsigned char UART2_Blue_Open[13] = "AT+B SCAN 3\r"; //打开蓝牙 unsigned char UART2_Blue_Off_Hook[13] = "AT+B ...
天道酬勤
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2019-4-29 14:16:56 | 显示全部楼层
紫气东升 发表于 2019-4-29 18:47
以下是我写的UART2串口函数,都在这里了,要发送数据时直接调用void UART2_SendCommand(unsigned char *s) ...

今天继续用这个程序调试,在发送的字符串指令后面加上\r。居然可以正常通信了。很奇怪,之前这样试都不行,今天再试竟然通了。
//控制蓝牙指令
unsigned char UART2_Blue_ChangeName[18] = "AT+B SLDN Eacome\r"; //修改蓝牙名称
unsigned char UART2_Blue_Close[13] = "AT+B SCAN 0\r";   //关闭蓝牙
unsigned char UART2_Blue_Open[13] = "AT+B SCAN 3\r";    //打开蓝牙
unsigned char UART2_Blue_Off_Hook[13] = "AT+B HFANSW\r";  //蓝牙摘机
unsigned char UART2_Blue_Hang_Up[13] = "AT+B HFCHUP\r";   //蓝牙挂机
天道酬勤
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2019-4-29 16:29:41 | 显示全部楼层
你串口助手用16进制显示,看看有没有收到\n
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2019-4-29 18:14:03 | 显示全部楼层
HXYDJ 发表于 2019-4-29 16:29
你串口助手用16进制显示,看看有没有收到\n

用16进制是不行的,我发的是字符串。用16进制会乱码
天道酬勤
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2019-4-29 18:27:16 | 显示全部楼层
还有一点就是UART2串口的IO引脚模式应该怎么设置的,我设置成这样行不行?
GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_OUT_OD_HIZ_SLOW); //开漏高电平低速输出
GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_OD_HIZ_SLOW);
天道酬勤
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2019-4-29 18:47:41 | 显示全部楼层
本帖最后由 紫气东升 于 2019-4-30 10:32 编辑

以下是我写的UART2串口函数,都在这里了,要发送数据时直接调用void UART2_SendCommand(unsigned char *s)。回到一开始的问题,哪位仁兄有空可以帮忙看看程序,是否是程序哪里出了问题,为什么发送数据后没有收到返回来的数据,串口助手却可以。

/*********************************************************************************************************
    UART2串口IO初始化
*********************************************************************************************************/
void UART2_IO_INIT(void)
{
     GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_OUT_OD_HIZ_SLOW); //开漏高电平低速输出
     GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_OD_HIZ_SLOW);
}
/*********************************************************************************************************
    UART2串口初始化
*********************************************************************************************************/
void UartConfiguration(void)
{
  UART2_DeInit();
  UART2_Init(       //UART2 configuration
             (u32)115200,      //BaudRate = 115200 baud  115200 波特率115200
             UART2_WORDLENGTH_8D,   //Word Length = 8 Bits 字长8位
             UART2_STOPBITS_1,    //One Stop Bit 1位停止位
             UART2_PARITY_NO,    //No parity 无奇偶校验
             UART2_SYNCMODE_CLOCK_DISABLE, //UART2 Clock disabled 禁用UART2串口时钟
             UART2_MODE_TXRX_ENABLE  //Receive and transmit enabled 使能发送接收
            );
//  UART2_ITConfig(UART2_IT_TXE, ENABLE);
  
  UART2_Cmd(ENABLE); //启用串口
  UART2_ITConfig(UART2_IT_RXNE_OR, ENABLE);
   
}

/*********************************************************************************************************
    UART2串口发送一个字符
*********************************************************************************************************/
void UART2_SendChar(unsigned char c)
{
//        while ((UART2->SR & 0x80)==0x00); //判断发送寄存器是否为空
        while((UART2_GetFlagStatus(UART2_FLAG_TXE)==RESET)); //检测发送数据寄存器是否为空
        UART2->DR = c;  //发送一个字符
        while((UART2_GetFlagStatus(UART2_FLAG_TC)==RESET));  //检测发送是否完成
}


/*********************************************************************************************************
    UART2串口发送字符串指令
*********************************************************************************************************/
void UART2_SendCommand(unsigned char *s)
{
        while (*s != '\0')  // \0 表示字符串结束标志,通过检测是否字符串末尾
        {
                UART2_SendChar(*s);
                s++;
        }
}
天道酬勤
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2019-4-30 08:38:08 | 显示全部楼层
紫气东升 发表于 2019-4-29 18:14
用16进制是不行的,我发的是字符串。用16进制会乱码

\n的16进制是 0x0A
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2019-4-30 10:22:50 | 显示全部楼层
本帖最后由 紫气东升 于 2019-4-30 10:24 编辑
HXYDJ 发表于 2019-4-30 08:38
\n的16进制是 0x0A

我再程序这边仿真发送字符串,然后用串口助手检测程序那边发送的字符串,没有收到\n(0x0A)

0.png
天道酬勤
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 12:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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