最近学习nucleo板子,学习到串口的时候发现加上这下面这句话就能实现串口printf打印数据了?百度说是fputc里面的输出指向串口(重定向),这句话不是很理解,望大佬讲解?。还有
__GNUC__ 这个在下面起啥作用呢?只知道是GNU 编译器的预定义宏。希望大佬详细的回答下,谢谢!
,/* USER CODE BEGIN 1 *
}
还有为啥用的是这个HAL_UART_Transmit函数,其他的不能代替吗?
HAL_UART_Transmit()是STM HAL库函数中的API,功能就是把printf里的数据发送给串口。
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
重定向簡單來說就是將weak的function讓您重新定義並指向
因MCU並沒有標準輸出的設備(stdout),所以默許定義是weak的
當您呼叫printf時候,會呼叫fput來處理字元到輸出哪個設備,導向uart的過程叫做重定向,當然您也可以當作是override的概念
然後要做的是就是由UART送出字元,所以使用HAL_UART_Transmit
以上
最重要的就是这一句:HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
实际上前面部分的功能就是把printf的功能映射到UART口,结果就是输出函数的内容发送到了UART口打印出来了。
其实要的是那个transmit那句,那句决定的是你用的哪个uart口作为输出串口,一般的stm32有多个串口。
fputc那句没用,可以不要