打印
[STM32F0]

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

[复制链接]
529|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
llljh|  楼主 | 2018-9-5 17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有关于STM32F0系列的奇偶校验的异步串口通信的例程吗?
沙发
chenjunt| | 2018-9-5 17:04 | 只看该作者
官方的模块

使用特权

评论回复
板凳
llljh|  楼主 | 2018-9-5 17:08 | 只看该作者
官方的模块看到的都是无校验模板,希望大侠们给予帮助指导。

使用特权

评论回复
地板
morrisk| | 2018-9-5 17:12 | 只看该作者
没有就自己写啊,坚决不当 拿来主义

使用特权

评论回复
5
zyf部长| | 2018-9-5 17:16 | 只看该作者

奇偶校验, 这个算法其实非常简单.
这个函数也就四行代码就搞定

使用特权

评论回复
6
llljh|  楼主 | 2018-9-5 17:19 | 只看该作者
楼上你写写测试一下,好像上位机收到的奇偶校验的数是不正确的。

使用特权

评论回复
7
xxmmi| | 2018-9-5 17:32 | 只看该作者
说方法不给结果: 你拿示波器量一下你从MCU端发出的一个字符,看看第 10 bit是不是奇偶校验对应的电平(前提是你的串口配置了奇校验还是偶校验),如果没问题的话,量一下波特率是不是对的,如果都没问题的话,你懂得

使用特权

评论回复
8
llljh|  楼主 | 2018-9-5 17:34 | 只看该作者
谢谢楼上的提醒,其实STM32F系列要发送奇偶校验位的时候,必须UART_WORDLENGTH_9B设置为9位,不然上位机就不会得到想要的值。

使用特权

评论回复
9
llljh|  楼主 | 2018-9-5 17:41 | 只看该作者

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__);
  }

}

使用特权

评论回复
10
huwr| | 2018-9-5 17:44 | 只看该作者
关他设置几位,借用小平同志的一句话,实践才是检验真理的唯一标准

使用特权

评论回复
11
huwr| | 2018-9-5 17:44 | 只看该作者
关他设置几位,借用小#平同志的一句话,实践才是检验真理的唯一标准

使用特权

评论回复
12
llljh|  楼主 | 2018-9-5 17:51 | 只看该作者

嗯,预料中的结果,先结贴吧,多谢大家啦

使用特权

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

本版积分规则

855

主题

11301

帖子

6

粉丝