OpenEdv-开源电子网

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

串口发送字符串问题,HELP!!!

[复制链接]

20

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2013-6-1
在线时间
0 小时
发表于 2014-11-19 16:53:59 | 显示全部楼层 |阅读模式
5金钱
void USART_SendStr(u8 *str)
{  
    while(*str!='\0')
    {
        USART_SendData(USART1,*str);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)!= SET);  
        str++;
    }
}

USART_SendStr("at+mode=0\r\n");

MDK4.12   在战舰的串口例程写入上述字符串发送函数,然后将用到print函数地方换成 USART_SendStr("at+mode=0\r\n"); 这句,用串口1,用串口调试助手观察,正常。


但是换成MDK5,USART2,在调用到USART_SendStr("at+mode=0\r\n");字符串发送函数的时候,程序就跑飞了。。。。
是我写的字符串发送不对吗?
顺便再问一下,如果我串口接收的字符串格式如下图:


\r\n开头和结尾都有...这怎么判断接收完毕啊?

最佳答案

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

找到问题了,RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2 应改为RCC_APB1PeriphClockCmd
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2013-6-1
在线时间
0 小时
 楼主| 发表于 2014-11-19 16:54:00 | 显示全部楼层
找到问题了,RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2
应改为RCC_APB1PeriphClockCmd
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-20 00:31:08 | 显示全部楼层
你同时换了2个内容,不具可比性。
你应该同样的代码,用MDK4/MDK5测试,才可以对比。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

20

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2013-6-1
在线时间
0 小时
 楼主| 发表于 2014-11-20 08:44:39 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
mdk5运行我改过的例程正常的
回复

使用道具 举报

20

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2013-6-1
在线时间
0 小时
 楼主| 发表于 2014-11-20 09:03:04 | 显示全部楼层
[mw_shl_code=c,true]/***************************** 说明:ZNE_100TL GPIO初始化 入口参数:无 出口参数:无 ******************************/ void ZNE_100TL_GPIOInit() { GPIO_InitTypeDef GPIO_InitStructure;//GPIO端口设置 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIOA时钟 //COM_CFG PA.1 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA1 //USART2_TX PA.2 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA2 //USART2_RX PA.3 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA3 //nRST PA.4 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA4 } /***************************** 说明:Usart2初始化 入口参数:无 出口参数:无 ******************************/ void Usart2_Init(u32 bound) { USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2 USART_DeInit(USART2); //复位串口2 //USART 初始化设置 USART_InitStructure.USART_BaudRate = bound;//波特率 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式 USART_InitStructure.USART_StopBits = USART_StopBits_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(USART2, &USART_InitStructure); //初始化串口 //Usart2 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器 USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启中断 USART_Cmd(USART2, ENABLE); //使能串口 }[/mw_shl_code] [mw_shl_code=c,true]/***************************** 说明:串口字符串发送函数 入口参数:u8 *str 出口参数:无 ******************************/ void USART_SendStr(u8 *str) {       while(*str!='\0')     {         USART_SendData(USART2,*str);         while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)!= SET);           str++;     } } /***************************** 说明:ZNE_100TL命令配置函数 入口参数:无 出口参数:无 ******************************/ void ZNE_100TL_Config() {     GPIO_ResetBits(GPIOA,GPIO_Pin_1);//COM_CFG 置低     delay_ms(200);     USART_SendStr("at+mode=0\r\n");     USART_SendStr("at\r\n"); } /***************************** 说明:main主函数 入口参数:无 出口参数:无 ******************************/ int main(void) {     ZNE_100TL_GPIOInit();     delay_init();     Usart2_Init(9600);     ZNE_100TL_Config(); while(1)     {         USART_SendStr("at+exit\r\n");     } } [/mw_shl_code]
回复

使用道具 举报

20

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2013-6-1
在线时间
0 小时
 楼主| 发表于 2014-11-20 09:23:21 | 显示全部楼层

就是这里。。。。
回复

使用道具 举报

20

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2013-6-1
在线时间
0 小时
 楼主| 发表于 2014-11-20 09:27:55 | 显示全部楼层
好奇怪啊,这次是另一个地方跑飞了。。。直接把    ZNE_100TL_Config();跳过执行了。。。
回复

使用道具 举报

0

主题

14

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-11-11
在线时间
0 小时
发表于 2014-11-20 21:48:59 | 显示全部楼层
哈哈  我比你好点!程序之前 ,已经把所有的外设挂在什么RCC上,我拿本子抄了一遍!
回复

使用道具 举报

20

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2013-6-1
在线时间
0 小时
 楼主| 发表于 2014-11-21 08:41:38 | 显示全部楼层
回复【8楼】立白洗衣粉:
---------------------------------
你好拼。。
回复

使用道具 举报

9

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2016-2-29
在线时间
25 小时
发表于 2016-3-11 11:13:49 | 显示全部楼层
哈哈  我比你好点!程序之前 ,已经把所有的外设挂在什么RCC上,我拿本子抄了一遍!
回复

使用道具 举报

7

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
745
金钱
745
注册时间
2016-1-20
在线时间
78 小时
发表于 2016-4-1 16:22:58 | 显示全部楼层
单片机可以读出字符串的内容吗?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 23:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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