兄弟打印机 正在接收数据 烧bin文件(兄弟打印机正在接收数据,如何烧录bin文件?)

  • 兄弟打印机 正在接收数据 烧bin文件(兄弟打印机正在接收数据,如何烧录bin文件?)已关闭评论
  • A+
所属分类:废墨清零软件
摘要

介绍在进行单板机系统开发时,我们常常需要将烧录文件通过串口传输到目标板。在传输的过程中,有时会遇到兄弟打印机正在接收数据但是烧录bin文件的情况,本文将介绍如何解决这个问题。问题分析在烧录bin文件的过程中,如果串口连着兄弟打印机,就会出现兄弟打印机正在接收数据的情况。这是因为,串

介绍

在进行单板机系统开发时,我们常常需要将烧录文件通过串口传输到目标板。在传输的过程中,有时会遇到兄弟打印机正在接收数据但是烧录bin文件的情况,本文将介绍如何解决这个问题。

问题分析

在烧录bin文件的过程中,如果串口连着兄弟打印机,就会出现兄弟打印机正在接收数据的情况。这是因为,串口发送完一个字节后会等待目标板的回复,如果目标板没有回复,那么串口会不停地发送。而兄弟打印机会将这些发送的内容当作打印内容进行打印。

解决方案

解决这个问题有两种方法:

断开兄弟打印机

断开兄弟打印机是最简单的解决方法,只需要将兄弟打印机的串口拔掉即可。但是这种方法对于需要同时进行打印和烧录操作的情况不适用。

修改串口通信方式

在烧录bin文件之前,我们可以先将串口的通信方式修改一下,如将其从阻塞模式改为非阻塞模式。在非阻塞模式下,串口发送完一个字节后不会等待目标板的回复,而是直接发送下一个字节。

具体实现

以下代码是使用STM32的HAL库,将串口通信方式修改为非阻塞模式的一个例子:

```

UART_HandleTypeDef huart1;

void MX_USART1_UART_Init(void) {

/* 初始化串口相关配置 */

huart1.Instance = USART1;

huart1.Init.BaudRate = 115200;

huart1.Init.WordLength = UART_WORDLENGTH_8B;

huart1.Init.StopBits = UART_STOPBITS_1;

huart1.Init.Parity = UART_PARITY_NONE;

huart1.Init.Mode = UART_MODE_TX_RX;

huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;

huart1.Init.OverSampling = UART_OVERSAMPLING_16;

if (HAL_UART_Init(&huart1) != HAL_OK) {

Error_Handler();

}

/* 将串口通信方式修改为非阻塞模式 */

if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) {

Error_Handler();

}

if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) {

Error_Handler();

}

if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK) {

Error_Handler();

}

}

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) {

/* 发送完成回调函数 */

}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {

/* 接收完成回调函数 */

}

void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) {

/* 错误回调函数 */

}

void HAL_UART_MspInit(UART_HandleTypeDef* huart) {

GPIO_InitTypeDef GPIO_InitStruct = {0};

if(huart->Instance==USART1) {

__HAL_RCC_USART1_CLK_ENABLE();

__HAL_RCC_GPIOA_CLK_ENABLE();

GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;

GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

GPIO_InitStruct.Alternate = GPIO_AF7_USART1;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

HAL_NVIC_SetPriority(USART1_IRQn, 0, 1);

HAL_NVIC_EnableIRQ(USART1_IRQn);

}

}

void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) {

if(huart->Instance==USART1) {

__HAL_RCC_USART1_FORCE_RESET();

__HAL_RCC_USART1_RELEASE_RESET();

HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);

HAL_NVIC_DisableIRQ(USART1_IRQn);

}

}

void USART1_IRQHandler(void) {

HAL_UART_IRQHandler(&huart1);

}

```

在这个例子中,我们首先将串口的通信方式初始化,然后将其修改为非阻塞模式。修改为非阻塞模式的关键在于以下三个函数的调用:

HAL_UARTEx_SetTxFifoThreshold()

HAL_UARTEx_SetRxFifoThreshold()

HAL_UARTEx_DisableFifoMode()

最后,需要在应用程序中实现三个回调函数:HAL_UART_TxCpltCallback()、HAL_UART_RxCpltCallback()和 HAL_UART_ErrorCallback(),这些函数将在非阻塞模式下串口通信过程中被自动调用。

兄弟打印机正在接收数据是我们在烧录bin文件时常遇到的问题之一。通过修改串口通信方式,我们可以将串口的阻塞模式改为非阻塞模式,从而解决兄弟打印机正在接收数据的问题。如果你也遇到了这个问题,可以尝试使用本文提到的方法解决。

  • 在线微信客服
  • 加13296583115 故障咨询
  • weinxin
  • 远程QQ客服
  • 加QQ113868949远程服务
  • weinxin