STM32G030F6 ADC+DMA多通道非连续采样无法正常工作?
STM32G0B1VE的CAN过滤器个数问题
STM32G0B1adc+dma采样数据错位
有没有stm32g071 Discovery kit的micropython的固件
STM32G0B1CBT6 Flash 不能写擦除,更不要说写入?fal库示例代码哪里有,分享一下,谢谢
STM32G031G6U6 PA8无法输出高低电平
STM32G071CBT6技术支持
基于GCC编译器的initcall在STM32如何实现?
stm32cubeide新用户无法注册
关于stm32g系列usart5的问题
我们先一个一个的来解决。
1、如何不自发自收,只要外部不短接到一块是不会发生自发自收的。如果方便最好还是上传一下工程。
2、发送不完整,发送的过程时什么样的?尽量不要在中断中进行数据发送。
static void MX_USART3_UART_Init(void)
{
/ USER CODE BEGIN USART3_Init 0 /
/ USER CODE END USART3_Init 0 /
/ USER CODE BEGIN USART3_Init 1 /
/ USER CODE END USART3_Init 1 /
huart3.Instance = USART3;
huart3.Init.BaudRate = 115200;
huart3.Init.WordLength = UART_WORDLENGTH_8B;
huart3.Init.StopBits = UART_STOPBITS_1;
huart3.Init.Parity = UART_PARITY_NONE;
huart3.Init.Mode = UART_MODE_TX_RX;
huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart3.Init.OverSampling = UART_OVERSAMPLING_16;
huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart3.Init.ClockPrescaler = UART_PRESCALER_DIV1;
huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&huart3) != HAL_OK)
{
Error_Handler(); }
/ USER CODE BEGIN USART3_Init 2 /
// __HAL_UART_CLEAR_FLAG(&huart3, UART_FLAG_FE);
// __HAL_UART_CLEAR_FLAG(&huart3, UART_FLAG_ORE);
/ USER CODE END USART3_Init 2 /
}
static void MX_USART4_UART_Init(void)
{
/ USER CODE BEGIN USART4_Init 0 /
/ USER CODE END USART4_Init 0 /
/ USER CODE BEGIN USART4_Init 1 /
/ USER CODE END USART4_Init 1 /
huart4.Instance = USART4;
huart4.Init.BaudRate = 9600;
huart4.Init.WordLength = UART_WORDLENGTH_8B;
huart4.Init.StopBits = UART_STOPBITS_1;
huart4.Init.Parity = UART_PARITY_NONE;
huart4.Init.Mode = UART_MODE_TX_RX;
huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart4.Init.OverSampling = UART_OVERSAMPLING_16;
huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart4.Init.ClockPrescaler = UART_PRESCALER_DIV4;
huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&huart4) != HAL_OK)
{
Error_Handler(); }
/ USER CODE BEGIN USART4_Init 2 /
/ USER CODE END USART4_Init 2 /
}
void USART3_4_IRQHandler(void)
{
/ USER CODE BEGIN USART3_4_IRQn 0 /
/ USER CODE END USART3_4_IRQn 0 /
HAL_UART_IRQHandler(&huart3);
HAL_UART_IRQHandler(&huart4);
/ USER CODE BEGIN USART3_4_IRQn 1 /
/ USER CODE END USART3_4_IRQn 1 /
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
}
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
// __HAL_UART_ENABLE_IT(&huart3, UART_IT_ERR);
}
如果想自发自收,在外部将串口的RX和TX短接即可。HAL库一般是接收完指定长度后退出中断,进入回调函数。发送数据不完整的情况,先用查询方式发送,确认正常,切换到中断。我怀疑是中断处理的问题。我看你的中断时串口3和串口4一块处理,是系统生成的,还是自己改的?
[md]1。程序大部分自动生成的。
2。我就是不想发生自发自收的情况,才请教大佬的。
目前,就是不知道是什么原因导致的。
谢谢您。如果发现什么不对地方,还请不吝赐教。再次感谢!!
那个idle标志是硬件检测后产生的,你可以选择不理它,比方不开启idle中断。这样它对你没有影响。
想使用UART的自发自收的话,硬件上TXRX短接即可,不过你就不能收发都使用查询方式,这样实现不了。你可以发送使用DMA,接收采用轮训方式 或者都使用DMA方式。
至于UART4的发送问题,估计你哪里误判了,你现在是非DMA方式,发送无非发完一个发送下一个,直到发送完毕为止。你说接收,倒还有接收不及时产生溢出方面的问题。你再检查下代码。
[md]感谢您的支持!
问题已经解决,初始化部分程序的问题。
已经修改。
[md]感谢您的支持!
问题已经解决,初始化的问题!