OpenEdv-开源电子网

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

串口通信实验中协议问题

[复制链接]

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-8-27
在线时间
1 小时
发表于 2015-8-27 17:55:09 | 显示全部楼层 |阅读模式
5金钱

[mw_shl_code=c,true]#include "sys.h" #include "usart.h" #if EN_USART1_RX //如果使能了接收 //串口1中断服务程序 //注意,读取USARTx->SR能避免莫名其妙的错误 u8 USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节. //接收状态 //bit15, 接收完成标志 //bit14, 接收到0x0d //bit13~0, 接收到的有效字节数目 u16 USART_RX_STA=0; //接收状态标记 void uart_init(u32 bound){ //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟 //USART1_TX GPIOA.9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9 //USART1_RX GPIOA.10初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10 //Usart1 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = USART1_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 初始化设置 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(USART1, &USART_InitStructure); //初始化串口1 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断 USART_Cmd(USART1, ENABLE); //使能串口1 } void USART1_IRQHandler(void) //串口1中断服务程序 { u8 Res; #if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS. OSIntEnter(); #endif if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾) { Res =USART_ReceiveData(USART1); //读取接收到的数据 if((USART_RX_STA&0x8000)==0)//接收未完成 { if(USART_RX_STA&0x4000)//接收到了0x0d { if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始 else USART_RX_STA|=0x8000; //接收完成了 } else //还没收到0X0D { if(Res==0x0d)USART_RX_STA|=0x4000; else { USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ; USART_RX_STA++; //此时15,14位都为0 if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收 } } } } #if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS. OSIntExit(); #endif } #endif [/mw_shl_code]

原子哥,咱们教程中的串口通信原程序中,中断处理函数中协议说要连着接到0x0d,0x0a,程序就能完成电脑和stm32收发,但是用串口调试助手时只按发送键就可以完成收发,是因为那个发送键就是0x0d+0x0a??

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

216

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1124
金钱
1124
注册时间
2015-2-27
在线时间
485 小时
发表于 2015-8-27 17:55:10 | 显示全部楼层
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13125
金钱
13125
注册时间
2012-11-26
在线时间
3814 小时
发表于 2015-8-27 17:55:10 | 显示全部楼层
你勾选了发送新行吧
学无止境
回复

使用道具 举报

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-8-27
在线时间
1 小时
 楼主| 发表于 2015-8-28 07:45:25 | 显示全部楼层
回复【2楼】enan:
---------------------------------enter这个按钮?您的意思是说发送键是enter这个键么?但是串口调试助手上显示发送键是ctrl+enter。。0x0d+0x0a相当于ctrl+enter?0x0d,0x0a不是表示换行和回车吗?
回复

使用道具 举报

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-8-27
在线时间
1 小时
 楼主| 发表于 2015-8-28 15:30:07 | 显示全部楼层
回复【4楼】jermy_z:
---------------------------------
是啊,我勾选了发送新行,勾不勾选没有影响,还是ctrl+enter发送。。源程序中一直提示:请输入数据,以回车键结束。。但是我一回车没法送只是变到下一行了,最后要发送还得按发送键或者使用快捷键ctrl+enter
回复

使用道具 举报

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-8-27
在线时间
1 小时
 楼主| 发表于 2015-8-28 15:54:22 | 显示全部楼层
回复【4楼】jermy_z:
---------------------------------
多谢,我明白了
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-8-28
在线时间
0 小时
发表于 2015-8-28 16:46:29 | 显示全部楼层
楼主用的编译软件是什么?
回复

使用道具 举报

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-8-27
在线时间
1 小时
 楼主| 发表于 2015-8-31 14:45:58 | 显示全部楼层
回复【7楼】KK_:
---------------------------------
Keil5
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-15 21:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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