
在外部中断中将printf写入,外部中断LED可以翻转,但串口不可显示 ```/* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "dma.h" #include "usart.h" #include "gpio.h" #include "stdio.h" /* Private includes ----------------------------------------------------------*/ void SystemClock_Config(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_DMA_Init(); MX_USART1_UART_Init(); while (1) { printf("key down\r\n"); } /* USER CODE END 3 */ }/**@brief System Clock Configuration@retval None */ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Configure the main internal regulator output voltage */ HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1_BOOST);/** Initializes the RCC Oscillators according to the specified parametersin the RCC_OscInitTypeDef structure. */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV6; RCC_OscInitStruct.PLL.PLLN = 85; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2; RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); }/** Initializes the CPU, AHB and APB buses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK) { Error_Handler(); } }/* USER CODE BEGIN 4 *//* USER CODE END 4 *//**@brief This function is executed in case of error occurrence.@retval None */ void Error_Handler(void) { /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ __disable_irq(); while (1) { } /* USER CODE END Error_Handler_Debug */ }#ifdef USE_FULL_ASSERT /**@brief Reports the name of the source file and the source line number where the assert_param error has occurred. where the assert_param error has occurred. @param file: pointer to the source file name@param line: assert_param error line source number@retval None */ void assert_failed(uint8_t *file, uint32_t line) { /* USER CODE BEGIN 6 */ /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* USER CODE END 6 */ } #endif /* USE_FULL_ASSERT */ int fputc(int ch,FILE *f) { while((USART1->ISR&0X40)==0);//中断状态寄存器 USART3->TDR=(uint8_t)ch;//传输数据寄存器return ch; } void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { UNUSED(GPIO_Pin); if(bule_key_Pin==GPIO_Pin) { HAL_GPIO_TogglePin(led2_GPIO_Port,led2_Pin); printf("key down\r\n"); } }``` ``` |
在使用nucleo H7开发版 USART2发送数据测试的时候,RTS脚产生与TX脚一样的伴随波形,波形与TX脚一致
STM32G070RET6,中断优先级配置没有效果
STM32H743VIT6 HAL 串口DMA发送掉帧
STM32G474CBT6 串口通信问题
I2C从模式编程之STOP中断
使用STM32L451CEU6型号的芯片,在用usart(PA9、PA10)进行串口通信时,发送0x55在PC端可以收到正确的数据,但是发送0x80会收到0x00的数据,发送0x01会收到0x7F的数据,串口助手的配置和CubeMX上的配置参数是一样的(都是115200,8N1),请问各位这个是什么原因呀?
STM32H7,0x00000000地址的内容引发hardfault
使用HAL_UARTEx_RxEventCallback实现的uart数据接收不会被清理,一直累加
STM32调试内部flash时候,有个疑问?
STM32H7打开DCache后,串口1DMA接受数据位空
fputc函数里用了uart1和uart3,怎么这样子?
判断和发送的串口号不一致
可以参考库中的例程
再就是波特率、帧格式两边一致;
如果要通过重定向做打印输出,写法及用法可以参考相关例程,比方:
\STM32Cube_FW_F4_V1.28.1\Projects\STM32F401RE-Nucleo\Examples\UART\UART_Printf
\STM32Cube_FW_G4_V1.6.0\Projects\NUCLEO-G474RE\Examples\UART\UART_Printf
\STM32Cube_FW_F1_V1.8.6\Projects\STM3210E_EVAL\Examples\UART\UART_Printf
......
其实也可以使用sprintf做字符转换后直接调用UART发送。