串口不能接收16进制数

发布: 2009-6-15 23:06 | 作者: 无雪 | 来源: StmFans思蜕盟 OPELC 自由电子联盟

#include "STM32F10x_LIB.H"
void RCC_Configuration(void)//时钟设置
{
//使能UART1时钟和A口时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
}

void GPIO_Configuration(void)  //IO口设置 PA9.10是默认的USART1接口
{
  GPIO_InitTypeDef GPIO_InitStructure;

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
   
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;        //浮空输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;         //选择引脚0,1 (选择相应的管脚)
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出频率最大50M(设置输出的频率)
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //带上拉输出 (设置为何种输出或何种输入)
  GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA0,1引脚
}


void USART_Configuration(void)                        
{
  
  USART_InitTypeDef USART_InitStructure; //串口参数初始化           

        //初始化参数设置
  USART_InitStructure.USART_BaudRate = 9600; //波特率9600
  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;//打开Rx接收和Tx发送功能

  USART_Init(USART1, &USART_InitStructure); //初始化
  USART_Cmd(USART1, ENABLE); //启动串口
}



int main()
{
        u16 i=0;
        RCC_Configuration(); //时钟初始化
        GPIO_Configuration();//IO口初始化
        USART_Configuration();//串口初始化
        while(1)
        {
                 while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);//等待接收完毕
                i =(USART_ReceiveData(USART1));//把接收到的数据赋给i   
                if(i==2)
                    GPIO_SetBits(GPIOA, GPIO_Pin_1);
        }
}

当我通过串口用16进制数发送2给板子时接收不到!!
请那位懂得帮忙解决一下
binglin (2009-6-15 23:23:09)
你是用什么方式发送数据给板子的?如何发?
无雪 (2009-6-16 11:16:28)
我是用串口调试助手发的.
我用16进制数发个2,总是检测不到接收了2 。
我用其他形式发送字符,就可以接收到。
假如我用字符形式发送2给板子,板子再把接收到的数发到串口调试助手,调试助手也能收到2,但板子中检测收到的数据的程序检测不到收到2
tuy0327 (2009-6-17 20:58:19)
还有这事?稀奇

能进中断吗?如果能进中断,看看收到的到底是什么?

另:我的程序都是按照16进制发的,顺便再说一句,不管你按照几进制发,最终都是二进制
catwill (2009-6-18 06:45:01)
不管你按照几进制发,最终都是二进制

哈哈!
无雪 (2009-6-18 10:27:30)
用其他形式的(不用16进制发的话)能发能也能接!
但是用16进制发就不行,
其他形式发的检测到的是ASCII码!
binglin (2009-6-18 10:38:00)
你确认发送到STM32的是0x02吗?
无雪 (2009-6-18 12:11:07)
我用串口调试助手发16进制数时!板子都接收不到数!
trinove (2009-6-18 12:22:35)
收发的模式都一样的吧 都设置为16进制HEX模式了吗?
binglin (2009-6-18 13:31:11)

QUOTE:

我用串口调试助手发16进制数时!板子都接收不到数!
无雪 发表于 2009-6-18 12:11
没图没真相,把串口调试助手发16进制数时的界面截个图发上来看看。
tuy0327 (2009-6-20 01:42:31)

QUOTE:

不管你按照几进制发,最终都是二进制

哈哈!
catwill 发表于 2009-6-18 06:45
为何发笑???
我说错了吗?
tuy0327 (2009-6-20 02:26:15)
现在没事我特意用串口助手试了下确实不行,不是接收不行,而是发送不行,这个我想是跟串口调试助手有关的

按照楼主的方式,我在编辑框里写了个2,注意是单纯的2,以十六进制发送,不管怎么发都不行,下面是串口监视到得:

这里两次都写出都是是空白
000075: 20.06.2009 01:56:27.578 +0.0
000081: 20.06.2009 01:56:39.156 +0.0

原因可能是这样的,声明:只是本人的理解,若有任何疑问,请参见我的签名!



看了一个串口调试助手的发布说明,验证了我的想法

一个不错的PC串行调试工具软件,具有串行口的设置、串行数据接收、发送等诸多功能。

可配合实验四在PC端使用。

    使用注意:

1、串口设为COM1或COM2,实际取决于实验系统与PC的连接口。

2、波特率设为19200bps,当通信双方的速度不一致时会出现乱码。

3、选择十六进制显示、发送,默认为ASCII码。(这里说明,其实十六进制发送,是先按照ASCII码读取的)

4、不要与SD-1实验软件同时打开,不然会造成串口使用冲突。

5、该软件不支持回车、退格等部分控制字符。

软件下载:串口调试助手V2.2.rar


怀疑楼主用的就是这个调试助手

建议楼主去做个试验,把2改成02,如果还不行,你打我都不犟!
tuy0327 (2009-6-20 02:29:17)

QUOTE:

你确认发送到STM32的是0x02吗?
binglin 发表于 2009-6-18 10:38
我确认他发的是个控制字符
Bin                 Dec     Hex    缩写/字符           解释
0000 0010     2        02      STX (start of text)   正文开始

绝对不是0x02
无雪 (2009-6-20 12:46:34)
呵呵呵!多谢各位兄弟的帮忙!确实是调试助手的问题!为换来一个调试助手现在能发了!


现在又出现来新的问题!
如果我改用重定义的printf函数给调试助手发数据时显示的都是空白!
tuy0327 (2009-6-22 02:13:40)
这个问题可能就是你的错了
无雪 (2009-6-22 19:44:21)
我在MDK里仿真没错!下载到板子后就不行了!
但不用printf直接用USART又没问题了!不知道是什么原因?
catwill (2009-6-23 17:54:01)
我认为你说得很对,所以笑了^_^
tuy0327 (2009-6-24 04:22:44)

QUOTE:

我认为你说得很对,所以笑了^_^
catwill 发表于 2009-6-23 17:54
靠,笑的我一身冷汗,检查了一遍又一遍