bad uart tx

This commit is contained in:
2025-10-30 12:01:58 +08:00
parent d6b562d808
commit e13395836f
4 changed files with 110 additions and 32 deletions

View File

@ -45,7 +45,8 @@ UART_HandleTypeDef huart1;
UART_HandleTypeDef huart2; UART_HandleTypeDef huart2;
/* USER CODE BEGIN PV */ /* USER CODE BEGIN PV */
static uint8_t rx_buf[16];
static volatile uint8_t rx_complete = 0;
/* USER CODE END PV */ /* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/
@ -95,26 +96,46 @@ int main(void)
MX_USART1_UART_Init(); MX_USART1_UART_Init();
MX_USART2_UART_Init(); MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
/* Start UART2 reception in interrupt mode */
HAL_UART_Receive_IT(&huart2, rx_buf, sizeof(rx_buf));
/* USER CODE END 2 */ /* USER CODE END 2 */
/* Infinite loop */ /* Infinite loop */
/* USER CODE BEGIN WHILE */ /* USER CODE BEGIN WHILE */
while (1) { while (1) {
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6); static uint32_t last_toggle_timestamp;
/* Heartbeat: emit tick timestamp over UART1 and blink the PB6 LED */ if (HAL_GetTick() - last_toggle_timestamp >= 1000) {
int msg_len = snprintf(heartbeat_buf, sizeof(heartbeat_buf), HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
"PB6 heartbeat %lu\r\n", (unsigned long)HAL_GetTick()); /* Heartbeat: emit tick timestamp over UART1 and blink the PB6 LED */
if (msg_len > 0) { int msg_len = snprintf(heartbeat_buf, sizeof(heartbeat_buf),
if (msg_len >= (int)sizeof(heartbeat_buf)) { "PB6 heartbeat %lu\r\n", (unsigned long)HAL_GetTick());
msg_len = (int)sizeof(heartbeat_buf) - 1; if (msg_len > 0) {
if (msg_len >= (int)sizeof(heartbeat_buf)) {
msg_len = (int)sizeof(heartbeat_buf) - 1;
}
HAL_UART_Transmit(&huart1, (uint8_t *)heartbeat_buf, (uint16_t)msg_len,
HAL_MAX_DELAY);
} }
HAL_UART_Transmit(&huart1, (uint8_t *)heartbeat_buf, (uint16_t)msg_len, last_toggle_timestamp = HAL_GetTick();
HAL_MAX_DELAY);
} }
HAL_Delay(1000);
/* USER CODE END WHILE */
/* Check if data received from UART2 */
if (rx_complete) {
rx_complete = 0;
/* Print received buffer as hex to UART1 */
char hex_buf[64];
int hex_len = snprintf(hex_buf, sizeof(hex_buf), "RX: ");
for (int i = 0; i < (int)sizeof(rx_buf) && hex_len < (int)sizeof(hex_buf) - 4; i++) {
hex_len += snprintf(hex_buf + hex_len, sizeof(hex_buf) - hex_len, "%02X ", rx_buf[i]);
}
hex_len += snprintf(hex_buf + hex_len, sizeof(hex_buf) - hex_len, "\r\n");
HAL_UART_Transmit(&huart1, (uint8_t *)hex_buf, (uint16_t)hex_len, HAL_MAX_DELAY);
/* Re-arm UART2 reception */
HAL_UART_Receive_IT(&huart2, rx_buf, sizeof(rx_buf));
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */ /* USER CODE BEGIN 3 */
} }
/* USER CODE END 3 */ /* USER CODE END 3 */
@ -275,6 +296,18 @@ static void MX_GPIO_Init(void)
/* USER CODE BEGIN 4 */ /* USER CODE BEGIN 4 */
/**
* @brief Rx Transfer completed callback
* @param huart: UART handle
* @retval None
*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if (huart->Instance == USART2) {
rx_complete = 1;
}
}
/* USER CODE END 4 */ /* USER CODE END 4 */
/** /**

View File

@ -108,6 +108,10 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
GPIO_InitStruct.Alternate = GPIO_AF7_USART1; GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USART1 interrupt Init */
HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspInit 1 */ /* USER CODE BEGIN USART1_MspInit 1 */
/* USER CODE END USART1_MspInit 1 */ /* USER CODE END USART1_MspInit 1 */
@ -132,6 +136,10 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
GPIO_InitStruct.Alternate = GPIO_AF7_USART2; GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USART2 interrupt Init */
HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART2_IRQn);
/* USER CODE BEGIN USART2_MspInit 1 */ /* USER CODE BEGIN USART2_MspInit 1 */
/* USER CODE END USART2_MspInit 1 */ /* USER CODE END USART2_MspInit 1 */
@ -161,6 +169,9 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
*/ */
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);
/* USART1 interrupt DeInit */
HAL_NVIC_DisableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspDeInit 1 */ /* USER CODE BEGIN USART1_MspDeInit 1 */
/* USER CODE END USART1_MspDeInit 1 */ /* USER CODE END USART1_MspDeInit 1 */
@ -179,6 +190,9 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
*/ */
HAL_GPIO_DeInit(GPIOA, USART_TX_Pin|USART_RX_Pin); HAL_GPIO_DeInit(GPIOA, USART_TX_Pin|USART_RX_Pin);
/* USART2 interrupt DeInit */
HAL_NVIC_DisableIRQ(USART2_IRQn);
/* USER CODE BEGIN USART2_MspDeInit 1 */ /* USER CODE BEGIN USART2_MspDeInit 1 */
/* USER CODE END USART2_MspDeInit 1 */ /* USER CODE END USART2_MspDeInit 1 */

View File

@ -55,7 +55,8 @@
/* USER CODE END 0 */ /* USER CODE END 0 */
/* External variables --------------------------------------------------------*/ /* External variables --------------------------------------------------------*/
extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart2;
/* USER CODE BEGIN EV */ /* USER CODE BEGIN EV */
/* USER CODE END EV */ /* USER CODE END EV */
@ -198,6 +199,34 @@ void SysTick_Handler(void)
/* please refer to the startup file (startup_stm32f4xx.s). */ /* please refer to the startup file (startup_stm32f4xx.s). */
/******************************************************************************/ /******************************************************************************/
/**
* @brief This function handles USART1 global interrupt.
*/
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
/* USER CODE END USART1_IRQn 1 */
}
/**
* @brief This function handles USART2 global interrupt.
*/
void USART2_IRQHandler(void)
{
/* USER CODE BEGIN USART2_IRQn 0 */
/* USER CODE END USART2_IRQn 0 */
HAL_UART_IRQHandler(&huart2);
/* USER CODE BEGIN USART2_IRQn 1 */
/* USER CODE END USART2_IRQn 1 */
}
/* USER CODE BEGIN 1 */ /* USER CODE BEGIN 1 */
/* USER CODE END 1 */ /* USER CODE END 1 */

View File

@ -123,42 +123,44 @@ ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath= ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=false ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USART1_UART_Init-USART1-false-HAL-true,4-MX_USART2_UART_Init-USART2-false-HAL-true ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USART1_UART_Init-USART1-false-HAL-true,4-MX_USART2_UART_Init-USART2-false-HAL-true
RCC.48MHZClocksFreq_Value=48000000 RCC.48MHZClocksFreq_Value=96000000
RCC.AHBFreq_Value=48000000 RCC.AHBFreq_Value=96000000
RCC.APB1CLKDivider=RCC_HCLK_DIV2
RCC.APB1Freq_Value=48000000 RCC.APB1Freq_Value=48000000
RCC.APB1TimFreq_Value=48000000 RCC.APB1TimFreq_Value=96000000
RCC.APB2Freq_Value=48000000 RCC.APB2Freq_Value=96000000
RCC.APB2TimFreq_Value=48000000 RCC.APB2TimFreq_Value=96000000
RCC.CortexFreq_Value=48000000 RCC.CortexFreq_Value=96000000
RCC.EthernetFreq_Value=48000000 RCC.EthernetFreq_Value=96000000
RCC.FCLKCortexFreq_Value=48000000 RCC.FCLKCortexFreq_Value=96000000
RCC.FLatency-AdvancedSettings=FLASH_LATENCY_1 RCC.FLatency-AdvancedSettings=FLASH_LATENCY_3
RCC.FamilyName=M RCC.FamilyName=M
RCC.HCLKFreq_Value=48000000 RCC.HCLKFreq_Value=96000000
RCC.HSE_VALUE=8000000 RCC.HSE_VALUE=8000000
RCC.HSI_VALUE=16000000 RCC.HSI_VALUE=16000000
RCC.I2SClocksFreq_Value=48000000 RCC.I2SClocksFreq_Value=48000000
RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FLatency-AdvancedSettings,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSE_VALUE,LSI_VALUE,MCO1PinFreq_Value,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLP,PLLQCLKFreq_Value,PLLSourceVirtual,PWR_Regulator_Voltage_Scale,RCC_MCO1Source,RCC_MCODiv1,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOInputMFreq_Value,VCOOutputFreq_Value,VcooutputI2S RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FLatency-AdvancedSettings,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSE_VALUE,LSI_VALUE,MCO1PinFreq_Value,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLP,PLLQCLKFreq_Value,PLLSourceVirtual,PWR_Regulator_Voltage_Scale,RCC_MCO1Source,RCC_MCODiv1,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOInputMFreq_Value,VCOOutputFreq_Value,VcooutputI2S
RCC.LSE_VALUE=32768 RCC.LSE_VALUE=32768
RCC.LSI_VALUE=32000 RCC.LSI_VALUE=32000
RCC.MCO1PinFreq_Value=24000000 RCC.MCO1PinFreq_Value=48000000
RCC.MCO2PinFreq_Value=48000000 RCC.MCO2PinFreq_Value=96000000
RCC.PLLCLKFreq_Value=48000000 RCC.PLLCLKFreq_Value=96000000
RCC.PLLM=8 RCC.PLLM=8
RCC.PLLN=384
RCC.PLLP=RCC_PLLP_DIV4 RCC.PLLP=RCC_PLLP_DIV4
RCC.PLLQCLKFreq_Value=48000000 RCC.PLLQCLKFreq_Value=96000000
RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
RCC.PWR_Regulator_Voltage_Scale=PWR_REGULATOR_VOLTAGE_SCALE2 RCC.PWR_Regulator_Voltage_Scale=PWR_REGULATOR_VOLTAGE_SCALE1
RCC.RCC_MCO1Source=RCC_MCO1SOURCE_PLLCLK RCC.RCC_MCO1Source=RCC_MCO1SOURCE_PLLCLK
RCC.RCC_MCODiv1=RCC_MCODIV_2 RCC.RCC_MCODiv1=RCC_MCODIV_2
RCC.RTCFreq_Value=32000 RCC.RTCFreq_Value=32000
RCC.RTCHSEDivFreq_Value=4000000 RCC.RTCHSEDivFreq_Value=4000000
RCC.SYSCLKFreq_VALUE=48000000 RCC.SYSCLKFreq_VALUE=96000000
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
RCC.VCOI2SOutputFreq_Value=96000000 RCC.VCOI2SOutputFreq_Value=96000000
RCC.VCOInputFreq_Value=1000000 RCC.VCOInputFreq_Value=1000000
RCC.VCOInputMFreq_Value=500000 RCC.VCOInputMFreq_Value=500000
RCC.VCOOutputFreq_Value=192000000 RCC.VCOOutputFreq_Value=384000000
RCC.VcooutputI2S=48000000 RCC.VcooutputI2S=48000000
USART1.IPParameters=VirtualMode USART1.IPParameters=VirtualMode
USART1.VirtualMode=VM_ASYNC USART1.VirtualMode=VM_ASYNC