请选择 进入手机版 | 继续访问电脑版

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

STM32G030串口使用偶校验问题

[复制链接]
hhccxw 提问时间:2022-8-13 09:11 / 未解决

收藏 评论3 发布时间:2022-8-13 09:11

举报

3个回答
hhccxw 回答时间:2022-8-13 09:18:12
在调试STM32G030串口时,串口设置8位数据、1位停止位、无校验时,串口通讯正常;但如果串口设置9位数据、1位停止位、偶校验时,串口不能正常通讯,有哪位高手看下问题出在哪吗?代码如下:
void MX_USART1_UART_Init(void)
{

          LL_USART_InitTypeDef USART_InitStruct = {0};
          LL_GPIO_InitTypeDef GPIO_InitStruct = {0};

        //初始化串口时钟
          LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1);
          LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);
              

//RS485发送接收控制IO初始化,输出端口
        LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);
          GPIO_InitStruct.Pin = RS485_CTRL_Pin;
          GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
          GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
          GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
          GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
          LL_GPIO_Init(RS485_CTRL_GPIO_Port, &GPIO_InitStruct);
         

/***** USART1 GPIO Configuration *******************
PA9   ------> USART1_TX
PA10   ------> USART1_RX
******************************************************/
          GPIO_InitStruct.Pin = Usart1_TXD_Pin;
          GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
          GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
          GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
          GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
          GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
          LL_GPIO_Init(Usart1_TXD_GPIO_Port, &GPIO_InitStruct);

          GPIO_InitStruct.Pin = Usart1_RXD_Pin;
          GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
          GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
          GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
          GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
          GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
          LL_GPIO_Init(Usart1_RXD_GPIO_Port, &GPIO_InitStruct);

          /* USART1 interrupt Init */
          NVIC_SetPriority(USART1_IRQn, 1);
          NVIC_EnableIRQ(USART1_IRQn);

          USART_InitStruct.PrescalerValue = LL_USART_PRESCALER_DIV1;
          USART_InitStruct.BaudRate = BAUDRATE;
          USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_9B;                                //9位带偶校验;此处设为8B
          USART_InitStruct.StopBits = LL_USART_STOPBITS_1;                                        //1位停止位
          USART_InitStruct.Parity = LL_USART_PARITY_EVEN;                                        //偶校验;此处设NONE时串口正常
          USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;
          USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
          USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
          LL_USART_Init(USART1, &USART_InitStruct);
          LL_USART_SetTXFIFOThreshold(USART1, LL_USART_FIFOTHRESHOLD_1_8);
          LL_USART_SetRXFIFOThreshold(USART1, LL_USART_FIFOTHRESHOLD_1_8);
          LL_USART_DisableFIFO(USART1);
          LL_USART_ConfigAsyncMode(USART1);

          LL_USART_Enable(USART1);
          LL_USART_EnableIT_RXNE(USART1);
          LL_USART_EnableIT_PE(USART1);

          /* Polling USART1 initialisation */
          while((!(LL_USART_IsActiveFlag_TEACK(USART1))) || (!(LL_USART_IsActiveFlag_REACK(USART1))))
          {
          }

        SetRS485Status(RS485_RECEIVE_DATA_STATUS);
          
}


void USART1_IRQHandler(void)
{
        u8 Datatemp;
       
        if( LL_USART_IsActiveFlag_RXNE(USART1) == RESET )                                        //未检测到串口中断
                return;

        Datatemp = LL_USART_ReceiveData8(USART1);
}

废鱼 回答时间:2022-8-13 10:49:31
简单说一下串口通讯测试过程,串口是通过电脑端的工具进行测试吗?可以试着先发送数据,保证电脑端能接收到正确的数据。
hhccxw 回答时间:2022-8-13 14:55:13
串口时通过YModem发送.bin文件,无校验时,MCU正常接收数据,成功后闪灯;但使用偶校验时,MCU连第一“C”都没发出来。换了一个简单的开发板,同样的结果,所有操作就改下面两句。STM32F103可以直接改这两个,其它的都不动,但是STM32G303就不行了。
          USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_9B;                                //9位带偶校验;此处设为8B
          USART_InitStruct.Parity = LL_USART_PARITY_EVEN;                                        //偶校验;此处设NONE时串口正常
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版