OpenEdv-开源电子网

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

串口发送字符串指针,串口助手乱显示码,为什么?求大神赐教

[复制链接]

7

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2019-3-15
在线时间
34 小时
发表于 2019-3-16 20:03:29 | 显示全部楼层 |阅读模式
4金钱
void uart3_init(u32 pclk,u32 bound)
{
        u32 temp;
        temp = (pclk*1000000+bound/2)/bound;
  RCC->AHB1ENR|=1<<1;                           //使能PORTB口时钟  
        RCC->APB1ENR|=1<<18;                          //使能串口3时钟
        GPIO_Set(GPIOB,PIN10|PIN11,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);//PB10,PB11,复用功能,上拉输出
        GPIO_AF_Set(GPIOB,10,7);                //PB10,AF7
        GPIO_AF_Set(GPIOB,11,7);                //PB11,AF7
         USART3->CR1=0;
   USART3->CR1|=1<<3;//使能发送
         USART3->CR1|=1<<4;//使能接收
         USART3->CR1|=0<<15;//设置over8=0,16倍过采样
         USART3->CR1|=0<<28;
         USART3->CR1|=0<<12;
         USART3->BRR|= temp;
         USART3->CR1|=1<<0;
}

void usart_senddata(char* buff)
{
while(*buff!='\0')
{
  USART3->TDR=*buff;
        while((USART3->ISR&0x40)==0)
   buff++;
}

}
void usart1_senddata(const char* buff)
{
        u8 data;
  while(*buff!='\0')
{
        data = *buff;
  USART1->TDR=*buff;
        while((USART1->ISR&0x40)==0)
   buff++;
}
// LED0(0);
}

void wifi_ap(void)
{
  usart1_senddata("AT+CWMODE=2\r\n");
        delay_ms(20);
  usart1_senddata("AT+RST\r\n");
        delay_ms(20);
        usart1_senddata("AT+CWSAP=“TP_LINK8266”,“123456”,1,4\r\n");
        delay_ms(20);
        LED0(0);
        usart1_senddata("AT+CIPMUX=1\r\n");
        delay_ms(20);
        usart1_senddata("AT+CIPSERVER=1,8086\r\n");
        delay_ms(20);
        LED1(1);
}

%K2EQY7@BWJ3L(`]3KN5V1C.png

最佳答案

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

用指针不会有问题的, 我也用子指针传的, 不同的是我没有直接改参数指针, 而是把参数的指针拷贝到新定义的局部指针, 改是改此局部指针, 参数的不改。 你试试吧
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-3-16 20:03:30 | 显示全部楼层
用指针不会有问题的, 我也用子指针传的, 不同的是我没有直接改参数指针, 而是把参数的指针拷贝到新定义的局部指针, 改是改此局部指针, 参数的不改。
你试试吧
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2019-3-17 02:34:36 | 显示全部楼层
估计是波特率设置有问题
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2019-3-15
在线时间
34 小时
 楼主| 发表于 2019-3-17 15:17:55 | 显示全部楼层
正点原子 发表于 2019-3-17 02:34
估计是波特率设置有问题

单片机和串口助手都是115200.不用指针的话,发送单个字符,或字符串可以显示
回复

使用道具 举报

7

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2019-3-15
在线时间
34 小时
 楼主| 发表于 2019-3-17 20:53:58 | 显示全部楼层
正点原子 发表于 2019-3-17 02:34
估计是波特率设置有问题

会不会是char*占用了四个字节的原因?而串口只能发送一个字节

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2019-3-18 01:59:00 | 显示全部楼层
潘月胜 发表于 2019-3-17 20:53
会不会是char*占用了四个字节的原因?而串口只能发送一个字节

你可以先测试下发送一个简单的数据,看正常不?
如果正常就不是波特率问题了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2019-3-15
在线时间
34 小时
 楼主| 发表于 2019-3-21 20:03:58 | 显示全部楼层
正点原子 发表于 2019-3-18 01:59
你可以先测试下发送一个简单的数据,看正常不?
如果正常就不是波特率问题了

好像串口坏了,下什么程序都发一样的乱码
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2019-3-22 01:28:34 | 显示全部楼层
潘月胜 发表于 2019-3-21 20:03
好像串口坏了,下什么程序都发一样的乱码

不一定是坏了,坏了你一般都收不到数据了。
如果乱码,八成是配置有问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2019-3-15
在线时间
34 小时
 楼主| 发表于 2019-3-22 14:50:58 | 显示全部楼层
正点原子 发表于 2019-3-22 01:28
不一定是坏了,坏了你一般都收不到数据了。
如果乱码,八成是配置有问题。

单片机跑了一下串口例程后,无论下什么程序进去,串口还是执行例程的程序,哪怕没有串口程序
http://www.openedv.com/forum.php ... &fromuid=133286
(出处: OpenEdv-开源电子网)
回复

使用道具 举报

7

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2019-3-15
在线时间
34 小时
 楼主| 发表于 2019-3-22 14:53:04 | 显示全部楼层
正点原子 发表于 2019-3-22 01:28
不一定是坏了,坏了你一般都收不到数据了。
如果乱码,八成是配置有问题。

我拿例程试了一下,也发生了这样的问题。不过例程把乱码的程序擦除了,但例程又不擦掉了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2019-3-23 03:21:39 | 显示全部楼层
潘月胜 发表于 2019-3-22 14:53
我拿例程试了一下,也发生了这样的问题。不过例程把乱码的程序擦除了,但例程又不擦掉了

例程也乱码 ?、是我们开发板?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2019-3-15
在线时间
34 小时
 楼主| 发表于 2019-3-23 09:42:16 | 显示全部楼层
正点原子 发表于 2019-3-23 03:21
例程也乱码 ?、是我们开发板?

是的 f7 阿波罗
回复

使用道具 举报

7

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2019-3-15
在线时间
34 小时
 楼主| 发表于 2019-3-23 14:51:58 | 显示全部楼层
edmund1234 发表于 2019-3-23 12:44
用指针不会有问题的, 我也用子指针传的, 不同的是我没有直接改参数指针, 而是把参数的指针拷贝到新定义 ...

好的,为什么要定义局部指针传参呢
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-3-23 15:00:20 | 显示全部楼层
潘月胜 发表于 2019-3-23 14:51
好的,为什么要定义局部指针传参呢

不是, 你误会了
void usart1_senddata(const char* buff)
{       char* ptr=buff;
        u8 data;
  while(*ptr!='\0')
{
        data = *ptr;
        “”“”
        ptr++;
回复

使用道具 举报

7

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2019-3-15
在线时间
34 小时
 楼主| 发表于 2019-3-23 15:29:59 | 显示全部楼层
edmund1234 发表于 2019-3-23 15:00
不是, 你误会了
void usart1_senddata(const char* buff)
{       char* ptr=buff;

非常感谢
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2019-5-14
在线时间
8 小时
发表于 2019-8-27 09:02:36 | 显示全部楼层
乱码是因为你的while后面少了封号
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2020-5-16
在线时间
9 小时
发表于 2020-8-25 18:57:19 | 显示全部楼层
edmund1234 发表于 2019-3-23 15:00
不是, 你误会了
void usart1_senddata(const char* buff)
{       char* ptr=buff;

+56546464
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-30 14:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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