你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

求:STM32串口设置为 7 Even 1 的方法

[复制链接]
c疯鸟 提问时间:2018-12-8 23:44 /
在设置stm32的时候,我发现我将串口设置为7 Even 1的模式,可以发送但是不能正确接收数据,我用的芯片的型号是stm32f303,用stm32F1的开发板时也发现这个问题。以下是stm32f303的串口初始化代码:
  1. USART_InitTypeDef USART_InitStructure;
  2.     NVIC_InitTypeDef  NVIC_InitStructure;
  3.     GPIO_InitTypeDef  GPIO_InitStructure;

  4.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  5.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
  6.    
  7.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_7);
  8.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_7);

  9.     GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
  10.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  11.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  12.     GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
  13.     GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_2 ;
  14.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  15.    
  16.     GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
  17.     GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_3;
  18.     GPIO_Init(GPIOA, &GPIO_InitStructure);   

  19.     USART_InitStructure.USART_BaudRate            = BAUDRATE_9600;
  20.     USART_InitStructure.USART_WordLength          = USART_WordLength_8b;//USART_WordLength包涵数据位和校验位,故为8
  21.     USART_InitStructure.USART_StopBits            = USART_StopBits_1;
  22.     USART_InitStructure.USART_Parity              = USART_Parity_Even;
  23.     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  24.     USART_InitStructure.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx;
  25.     USART_Init(UART_TYPE_RS485, &USART_InitStructure);
  26.    
  27.     NVIC_InitStructure.NVIC_IRQChannel                   = USART2_IRQn;
  28.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = IRQ_RS485_MAIN_PRIO;
  29.     NVIC_InitStructure.NVIC_IRQChannelSubPriority        = IRQ_RS485_SUB_PRIO;
  30.     NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
  31.     NVIC_Init(&NVIC_InitStructure);

  32.     USART_ITConfig(UART_TYPE_RS485, USART_IT_RXNE, ENABLE);

  33.     USART_Cmd(UART_TYPE_RS485, ENABLE);   
复制代码




评分

参与人数 1 ST金币 +20 收起 理由
STMCU + 20

查看全部评分

收藏 评论2 发布时间:2018-12-8 23:44

举报

2个回答
c疯鸟 回答时间:2018-12-8 23:47:10
本帖最后由 c疯鸟 于 2018-12-9 09:38 编辑

以下是stm32f103的串口初始化代码:
  1. void USART_Config(void)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         USART_InitTypeDef USART_InitStructure;

  5.         // 打开串口GPIO的时钟
  6.         DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
  7.         
  8.         // 打开串口外设的时钟
  9.         DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);

  10.         // 将USART Tx的GPIO配置为推挽复用模式
  11.         GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
  12.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  13.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  14.         GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);

  15.   // 将USART Rx的GPIO配置为浮空输入模式
  16.         GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
  17.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  18.         GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
  19.         
  20.         // 配置串口的工作参数
  21.         // 配置波特率
  22.         USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
  23.         // 配置 针数据字长
  24.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  25.         // 配置停止位
  26.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  27.         // 配置校验位
  28.         USART_InitStructure.USART_Parity = USART_Parity_Even ;
  29.         // 配置硬件流控制
  30.         USART_InitStructure.USART_HardwareFlowControl =
  31.         USART_HardwareFlowControl_None;
  32.         // 配置工作模式,收发一起
  33.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  34.         // 完成串口的初始化配置
  35.         USART_Init(DEBUG_USARTx, &USART_InitStructure);
  36.         
  37.         // 串口中断优先级配置
  38.         NVIC_Configuration();
  39.         
  40.         // 使能串口接收中断
  41.         USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);        
  42.         
  43.         // 使能串口
  44.         USART_Cmd(DEBUG_USARTx, ENABLE);            
  45. }
复制代码

USART_WordLength包含数据位和校验位,故为8
c疯鸟 回答时间:2018-12-10 09:56:39
我知道了,输入要&0x7F得到正确数值

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版