打印
[STM32F2]

串口问题

[复制链接]
1907|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ge_yuer|  楼主 | 2015-10-10 17:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我配置串口1后发送数据,初始化后,发送0~7,结果我串口监视出的数据是:0x7f,0x3f,0x7e,0x1f,0x7d,0x3e,0x7c,00,目前不知道是什么问题。
沙发
yklstudent| | 2015-10-10 17:35 | 只看该作者
检查下波特率看看

使用特权

评论回复
板凳
598330983| | 2015-10-10 17:38 | 只看该作者
怎么多了几个东东,这个查看一下波特率看看,是不是设置的不正确,读错了。

使用特权

评论回复
地板
ge_yuer|  楼主 | 2015-10-12 08:29 | 只看该作者
598330983 发表于 2015-10-10 17:38
怎么多了几个东东,这个查看一下波特率看看,是不是设置的不正确,读错了。 ...

我配置的波特率是9600,用串口助手也是9600,这个应该不会错吧、

使用特权

评论回复
5
xzezhen| | 2015-10-12 08:34 | 只看该作者
你看一下程序里面的“UartHandle.Init.WordLength = UART_WORDLENGTH_8B;”,如果是这样,你的串口助手的数据位应该是7位,停止位是1位,试试看!

使用特权

评论回复
6
ge_yuer|  楼主 | 2015-10-12 08:49 | 只看该作者
xzezhen 发表于 2015-10-12 08:34
你看一下程序里面的“UartHandle.Init.WordLength = UART_WORDLENGTH_8B;”,如果是这样,你的串口助手的数 ...

刚试了,还是不行,我配置的波特率是9600,我串口助手上改为4800,数据有错误,但是更加接近输出数值,不规律的输出。

使用特权

评论回复
7
xzezhen| | 2015-10-12 11:41 | 只看该作者
ge_yuer 发表于 2015-10-12 08:49
刚试了,还是不行,我配置的波特率是9600,我串口助手上改为4800,数据有错误,但是更加接近输出数值,不 ...

不是让你配置波特率的值,是修改你的程序.........

使用特权

评论回复
8
ge_yuer|  楼主 | 2015-10-12 12:18 | 只看该作者
xzezhen 发表于 2015-10-12 11:41
不是让你配置波特率的值,是修改你的程序.........

我的程序配置是“UartHandle.Init.WordLength = UART_WORDLENGTH_8B;”我下载的开发板的示例程序,
我用串口助手发送1~8数值,我串口接收到的分别为:0x7f,0x3f,0x7e,0x1f,0x7d,0x3e,0x7c,0x0f;接收到立即发送出去,我串口助手接收到的数据为:0x40,0x60,0x20,0x70,0x41,0x30,0x10,0x78;我想知道为什么会这样?波特率匹配,串口助手数据位改为7也是不对的。

使用特权

评论回复
9
xzezhen| | 2015-10-12 12:20 | 只看该作者
ge_yuer 发表于 2015-10-12 12:18
我的程序配置是“UartHandle.Init.WordLength = UART_WORDLENGTH_8B;”我下载的开发板的示例程序,
我用 ...

把你配置串口的程序贴上来看看

使用特权

评论回复
10
ge_yuer|  楼主 | 2015-10-12 12:40 | 只看该作者
xzezhen 发表于 2015-10-12 12:20
把你配置串口的程序贴上来看看

#define GPS                                USART3       
#define GPS_CLK                            RCC_APB1Periph_USART3

#define GPS_TX_PIN                         GPIO_Pin_10
#define GPS_TX_GPIO_PORT                   GPIOC
#define GPS_TX_GPIO_CLK                    RCC_AHB1Periph_GPIOC
#define GPS_TX_SOURCE                      GPIO_PinSource10
#define GPS_TX_AF                          GPIO_AF_USART3


#define GPS_RX_PIN                         GPIO_Pin_11
#define GPS_RX_GPIO_PORT                   GPIOC
#define GPS_RX_GPIO_CLK                    RCC_AHB1Periph_GPIOC
#define GPS_RX_SOURCE                      GPIO_PinSource11
#define GPS_RX_AF                          GPIO_AF_USART3

#define GPS_IRQn                    USART3_IRQn
void test_USART3_Configuration(uint32_t bandrate)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;

  RCC_AHB1PeriphClockCmd(GPS_TX_GPIO_CLK,ENABLE);
  RCC_AHB1PeriphClockCmd(GPS_RX_GPIO_CLK,ENABLE);
       
  RCC_APB1PeriphClockCmd(GPS_CLK,ENABLE);

  GPIO_PinAFConfig(GPS_TX_GPIO_PORT, GPS_TX_SOURCE, GPS_TX_AF);
  GPIO_PinAFConfig(GPS_RX_GPIO_PORT, GPS_RX_SOURCE, GPS_RX_AF);

        //TX ÍÆÍìÊä³ö
  GPIO_InitStructure.GPIO_Pin = GPS_TX_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPS_TX_GPIO_PORT, &GPIO_InitStructure);

        //RXÉÏÀ­ÊäÈë
  GPIO_InitStructure.GPIO_Pin = GPS_RX_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//  GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPS_RX_GPIO_PORT, &GPIO_InitStructure);

        NVIC_InitTypeDef NVIC_InitStructure;
//        NVIC_PriorityGroupConfig
  /* Enable the USARTx Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = GPS_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);


  USART_InitStructure.USART_BaudRate = bandrate;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  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(GPS, &USART_InitStructure);

  USART_ITConfig(GPS,USART_IT_RXNE,ENABLE);
//        USART_ClearFlag(USART2,USART_FLAG_TC);
//        USART_ITConfig(WIFI,USART_IT_TXE,ENABLE);
  USART_Cmd(GPS, ENABLE);
       
}

使用特权

评论回复
11
xzezhen| | 2015-10-12 13:09 | 只看该作者
ge_yuer 发表于 2015-10-12 12:40
#define GPS                                USART3       
#define GPS_CLK                            RCC_APB1Periph_USA ...

把USART_WordLength_8b修改为USART_WordLength_9b试一试

使用特权

评论回复
12
ge_yuer|  楼主 | 2015-10-12 13:23 | 只看该作者
xzezhen 发表于 2015-10-12 13:09
把USART_WordLength_8b修改为USART_WordLength_9b试一试

试了,数据还是那样有问题,不知道是哪里出了问题了。就是初始化,然后发送接收

使用特权

评论回复
13
xzezhen| | 2015-10-12 13:28 | 只看该作者
ge_yuer 发表于 2015-10-12 13:23
试了,数据还是那样有问题,不知道是哪里出了问题了。就是初始化,然后发送接收

。 ...

你再多检查一下看看:
1、波特率是否都设置对了?
2、串口配置是否正确了?
3、PC端的串口助手是否设置正确,比如波特率,数据位,停止位,校验位,控制流是否都跟程序的设置一样了?

耐心去查找调试,很快就搞定了

使用特权

评论回复
14
NE5532| | 2015-10-12 14:06 | 只看该作者
别迷信库程序了,靠自己吧。把数据发送成0x55,循环发送,用示波器检查波特率是否正确。

使用特权

评论回复
15
598330983| | 2015-10-12 15:58 | 只看该作者
对,还有停止位,停止位,是不是有错。

使用特权

评论回复
16
sun1238898| | 2015-10-12 20:31 | 只看该作者
看这代码没问题啊,是不是串口时钟配置的不对了。

使用特权

评论回复
17
稳稳の幸福| | 2015-10-12 21:19 | 只看该作者
一个串口都弄不好,楼主也是太有才了

使用特权

评论回复
18
ichuangj| | 2015-10-13 17:16 | 只看该作者
应该是配置问题。

使用特权

评论回复
19
米尔豪斯| | 2015-10-13 21:08 | 只看该作者
波特率都设置对了吗

使用特权

评论回复
20
金刚葫芦娃啊| | 2015-10-16 19:52 | 只看该作者
找个对的例子  比对一下不就行了嘛

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

40

帖子

0

粉丝