打印
[STM32F0]

如何解决奇偶校验的异步串口通信问题

[复制链接]
1750|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Jack67|  楼主 | 2017-8-16 17:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大侠们,有关于STM32F0系列的奇偶校验的异步串口通信的例程吗?官方的模块看到的都是无校验模板,希望大侠们给予帮助指导。
沙发
feelhyq| | 2017-8-16 23:23 | 只看该作者
没有就自己写啊,坚决不当 拿来主义

使用特权

评论回复
板凳
airwill| | 2017-8-17 08:15 | 只看该作者
奇偶校验, 这个算法其实非常简单.
这个函数也就四行代码就搞定

使用特权

评论回复
地板
Jack67|  楼主 | 2017-8-18 11:16 | 只看该作者
楼上你写写测试一下,好像上位机收到的奇偶校验的数是不正确的。

使用特权

评论回复
5
feelhyq| | 2017-8-18 11:57 | 只看该作者
本帖最后由 feelhyq 于 2017-8-18 11:59 编辑
Jack67 发表于 2017-8-18 11:16
楼上你写写测试一下,好像上位机收到的奇偶校验的数是不正确的。

说方法不给结果: 你拿示波器量一下你从MCU端发出的一个字符,看看第 10 bit是不是奇偶校验对应的电平(前提是你的串口配置了奇校验还是偶校验),如果没问题的话,量一下波特率是不是对的,如果都没问题的话,你懂得

使用特权

评论回复
6
Jack67|  楼主 | 2017-8-18 12:14 | 只看该作者
谢谢楼上的提醒,其实STM32F系列要发送奇偶校验位的时候,必须UART_WORDLENGTH_9B设置为9位,不然上位机就不会得到想要的值。
void MX_USART1_UART_Init(void)
{
  huart1.Instance = USART1;
  huart1.Init.BaudRate = 9600;
  huart1.Init.WordLength = UART_WORDLENGTH_9B;  //UART_WORDLENGTH_8B UART_WORDLENGTH_9B
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_EVEN;    //UART_PARITY_EVEN UART_PARITY_NONE
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_DMADISABLEONERROR_INIT;
  huart1.AdvancedInit.DMADisableonRxError = UART_ADVFEATURE_DMA_DISABLEONRXERROR;
  if (HAL_UART_Init(&huart1) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}

使用特权

评论回复
7
feelhyq| | 2017-8-18 13:23 | 只看该作者
Jack67 发表于 2017-8-18 12:14
谢谢楼上的提醒,其实STM32F系列要发送奇偶校验位的时候,必须UART_WORDLENGTH_9B设置为9位,不然上位机就 ...

关他设置几位,借用小平同志的一句话,实践才是检验真理的唯一标准

使用特权

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

本版积分规则

2

主题

10

帖子

0

粉丝