打印
[STM32F2]

串口问题

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

使用特权

评论回复
板凳
kangzj| | 2018-8-29 12:26 | 只看该作者
怎么多了几个东东,这个查看一下波特率看看,是不是设置的不正确,读错了。

使用特权

评论回复
地板
zyf部长|  楼主 | 2018-8-29 12:27 | 只看该作者
我配置的波特率是9600,用串口助手也是9600,这个应该不会错吧、

使用特权

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

使用特权

评论回复
6
zyf部长|  楼主 | 2018-8-29 12:32 | 只看该作者
刚试了,还是不行,我配置的波特率是9600,我串口助手上改为4800,数据有错误,但是更加接近输出数值,不规律的输出。

使用特权

评论回复
7
chuxh| | 2018-8-29 12:34 | 只看该作者
不是让你配置波特率的值,是修改你的程序.........

使用特权

评论回复
8
zyf部长|  楼主 | 2018-8-29 12:35 | 只看该作者

我的程序配置是“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
juventus9554| | 2018-8-29 12:38 | 只看该作者


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

使用特权

评论回复
10
zyf部长|  楼主 | 2018-8-29 12:40 | 只看该作者
#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
kangzj| | 2018-8-29 12:42 | 只看该作者
把USART_WordLength_8b修改为USART_WordLength_9b试一试

使用特权

评论回复
12
zyf部长|  楼主 | 2018-8-29 12:45 | 只看该作者
试了,数据还是那样有问题,不知道是哪里出了问题了。就是初始化,然后发送接收

使用特权

评论回复
13
llljh| | 2018-8-29 12:47 | 只看该作者
你再多检查一下看看:
1、波特率是否都设置对了?
2、串口配置是否正确了?
3、PC端的串口助手是否设置正确,比如波特率,数据位,停止位,校验位,控制流是否都跟程序的设置一样了?

使用特权

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

使用特权

评论回复
15
pengf| | 2018-8-29 12:51 | 只看该作者
对,还有停止位,停止位,是不是有错。

使用特权

评论回复
16
renyaq| | 2018-8-29 12:53 | 只看该作者


看这代码没问题啊,是不是串口时钟配置的不对了。

使用特权

评论回复
17
wangpe| | 2018-8-29 12:55 | 只看该作者
一个串口都弄不好,楼主也是太有才了

使用特权

评论回复
18
Stannis| | 2018-8-29 17:38 | 只看该作者
感觉还是波特率的问题

使用特权

评论回复
19
zwll| | 2018-8-29 17:42 | 只看该作者


应该是配置问题。
波特率都设置对了吗

使用特权

评论回复
20
houcs| | 2018-8-29 17:46 | 只看该作者
串口助手上的配置是否正确,有个hex什么的容易错选

使用特权

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

本版积分规则

694

主题

7102

帖子

8

粉丝