7、STM32 的串口编程(printf 重定向)
2016-11-27 13:48
267 查看
在开发过程中,通常需要进行一些必要的 log 输出,在代码的关键地方输出 log 便于我们 DEBUG,也便于跟踪程序的运行状态, 最根本的方法就是通过串口输出。STM32 的串口资源比较丰富, 使用流程如下 :
l 配置时钟
Ø 初始化系统时钟 SystemInit();
Ø 使能串口映射到的GPIO端口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
Ø 使能串口时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
Ø 使能端口复用时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
2 初始化 GPIO 端口
Ø 配置发送端的 GPIO 口为复用推挽式输出模式
Ø 配置接收为浮空输入。
3 如果使用中断方式, 配置中断通道, 优先级、使能中断
4 串口配置
Ø 定义配置结构体 USART_InitTypeDef;
Ø 配置波特率、数据长度、奇偶校验、停止位等。
Ø 调用 USART_Init 函数初始化串口。
Ø 如果使用中断方式、这里还需要开启串口中断 USART_ITConfig, 同时需要配置中断优先级。(与前面的外部
中断配置方式类似)
Ø 调用 USART_Cmd 函数使能串口
Ø 如果使用中断、调用 USART_ClearFlag 清除发送完成标志位
5 中断服务程序的编写(一般接收使用中断、发送不使用中断)
Ø 首先判断是否为接收中断
USART_GetITStatus(USART2,USART_IT_RXNE) != RESET
Ø 清除中断
4000
标志
USART_ClearITPendingBit(USART2,USART_IT_RXNE);
Ø 读取接收到的数据
USART_ReceiveData(USART2)
6 数据的发送
Ø 调用函数 USART_SendData(USART2, data);
Ø 等待发送完成
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
printf 和 scanf 的重定向
通过上述的一系列配置之后,就可以使用串口进行输入输出了。但是这样的方式只能简单的进行输出,因为这里涉及到的是最底层的串口发送数据,不涉及任何的数据格式等转换。因此用起来还是很不方便,Keil 中可以对printf 进行重定向,这样就可以使用 c 标准库中的 printf 和 scanf 函数了。只需要重载一个fputc函数即可调用 printf 函数方便的打印信息了。如果需要使用 scanf
函数, 只需要实现一个 fgetc 函数即可。
int fputc(int ch, FILE *f)
{
/* 发送数据*/
USART_SendData(USART2,(u8)ch);
/*等待发送完毕*/
while( USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET );
return ch;
}
int fgetc(FILE *f)
{
while(!(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == SET));
return (USART_ReceiveData(USART2));
}
最后需要设置一下, 在 keil 软件中项目的 optionfor target 中的 target 选项页面, 勾选右边CodeGeneration 窗口中的 UseMicro LIB
当然在头文件中需要包含 #include “stdio.h”, 配置完毕之后就可以使用 printf 函数和 scanf 函数进行输出了。
源代码下载 :点击打开链接
相关文章推荐
- 实现STM32的串口数据发送和printf函数重定向
- STM32中printf重定向到串口
- stm32_013_STM32printf()函数重定向到串口
- 【stm32】实现STM32的串口数据发送和printf函数重定向
- STM32学习笔记-配置串口,printf重定向
- 【STM32】keil MDK下重定向printf到串口(基于STM32CubeMX)
- 【stm32】实现STM32的串口数据发送和printf函数重定向
- STM32中printf重定向到串口
- STM32中ADC的使用/printf函数重定向串口显示内部温度传感器测量值
- STM32中printf重定向到串口
- STM32输出调试信息-printf重定向到串口
- 在stm32 单片机程序中使用printf()进行串口调试
- STM32中重定位printf到串口输出
- 在STM32中使用printf发送字符串到串口
- 在STM32使用串口printf
- STM32 printf 函数重定向
- CoIDE串口重定向printf
- (STM32 A串口2)接收(STM32 B数据printf2),同时STM32 A使用串口1printf给电脑
- STM32的printf函数重定向
- STM32--对原子哥USART实验中printf重定向进行分析