在外部中断中将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"); } }``` ``` |
STM32H7打开DCache后,串口1DMA接受数据位空
使用STM32F103控制两步进电机同时进行不同的运动(软件指令驱动),与控制一个电机的不同之处在于哪里?
STM32CubeIDE STM32H743XIH6,串口无法重定向,且发送内容波特率不对乱码
STM32H5 USB虚拟串口
STM32L431在去掉注释memcpy后会不断重启
STM32F4的串口在配置DMA之后,不能使用高波特率吗?
用stm32cubeide上传串口通信代码之后,st-link红灯一直亮,再想下载的时候显示Target no device found
stm32f103USART2无法收发信息
请问为什么自己加了stdio.h,sprintf还是用不了?
STM32H7串口智能卡模式
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发送。