F103 printf串口打印程序移植到F4
我在使用F103做开发的时候,一直都是通过串口输出调试信息的,拿到板子之后,我想的第一件事就是把串口这一部分的功能实现,要不然没有办法进行下一步的开发。。。 首先还是工程的配置,这次的工程配置和之间的差不多,流程都是一样的,只是在开始的Pinout配置时将USART3配置成异步模式即Asynchronous
时钟我按F103的习惯配置成了72MHZ ,其他的都一样了。 我先查看了一下硬石写的HAL库的串口的实现
然后是F103平台的Printf代码的实现
- #if 1
- #pragma import(__use_no_semihosting)
- struct __FILE
- {
- int handle;
- /* Whatever you require here. If the only file you are using is */
- /* standard output using printf() for debugging, no file handling */
- /* is required. */
- };
- /* FILE is typedef d in stdio.h. */
- FILE __stdout;
- _sys_exit(int x)
- {
- x = x;
- }
- int fputc(int ch, FILE *f)
- {
- while((USART1->SR&0X40)==0);
- USART1->DR = (u8) ch;
- return ch;
- }
- #endif
复制代码
发现这两者的差距不是很大,只是具体到硬件的时候,由于平台的不同代码不太一样,我综合了一下,就改出了自己的程序
- #if 1
- #pragma import(__use_no_semihosting)
- struct __FILE
- {
- int handle;
- /* Whatever you require here. If the only file you are using is */
- /* standard output using printf() for debugging, no file handling */
- /* is required. */
- };
- /* FILE is typedef¡¯ d in stdio.h. */
- FILE __stdout;
- void _sys_exit(int x)
- {
- x = x;
- }
- int fputc(int ch, FILE *f)
- {
- HAL_UART_Transmit(&huart3, (uint8_t *)&ch, 1, 0xffff);
- return ch;
- }
- int fgetc(FILE *f)
- {
- uint8_t ch = 0;
- HAL_UART_Receive(&huart3,&ch, 1, 0xffff);
- return ch;
- }
- #endif
复制代码
当然还要在usart.h的文件中加上这一句
- /* USER CODE BEGIN Includes */
- #include "stdio.h"
- /* USER CODE END Includes */
复制代码
这样在主函数中调用printf就可以通过串口输出到电脑上了。
|