STM32F103串口配置,并且使用printf进行打印

发布者:幸福如意最新更新时间:2019-01-29 来源: eefocus关键字:STM32F103  串口配置  printf 手机看文章 扫描二维码
随时随地手机看文章

首先要配置串口时钟:


    // USART1 clock enable 

    RCC_APB2PeriphClockCmd(

    RCC_APB2Periph_USART1 |

    RCC_APB2Periph_GPIOA |

    RCC_APB2Periph_AFIO, ENABLE);

然后再配置端口,在配置串口,再使能即可。


 


void USART1_Init(void)

{

/////// config the gpio

    GPIO_InitTypeDef GPIO_InitStructure;

    

    /* PA9 USART1_Tx */ 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //配置发送端口

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  // 

    GPIO_Init(GPIOA, &GPIO_InitStructure); 

    /* PA10 USART1_Rx  */ 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //配置接收端口

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;// 

    GPIO_Init(GPIOA, &GPIO_InitStructure);

    

//////////////

    

    USART_InitTypeDef USART_InitStructure;//

 

    USART_InitStructure.USART_BaudRate = 115200;//配置波特率

    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//

    USART_InitStructure.USART_StopBits = USART_StopBits_1;// 

    USART_InitStructure.USART_Parity = USART_Parity_No;//

    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//

    

    //config clock

    USART_ClockInitTypeDef   USART_ClockInitStructure;

    

    USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;     

    USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;      

 

    USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;      

    USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable; 

    

    USART_ClockInit(USART1, &USART_ClockInitStructure);

 

    /* Configure USART1 */ 

    USART_Init(USART1, &USART_InitStructure);//

    

    /* Enable the USART1 */ 

    USART_Cmd(USART1, ENABLE);//??1? 

    

}

串口配置完毕,为了使得能够使用 printf 进行打印,需要进行重定向:


在 stm32f10x_usart.c 中添加如下代码:


int fputc(int ch, FILE *f)

{

 /* 给USART写一个字符 */

 USART_SendData(USART1, (uint8_t) ch);

 

 /* 循环直到发送完成 */

 while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);

 

 return ch;

}

在 stm32f10x_usart.h 中添加stdio.h头文件,然后,添加声明 int fputc(int ch, FILE *f);


最后,在设置里面 Target 下面 勾选“Use MicroLIB” 就可以了。


关键字:STM32F103  串口配置  printf 引用地址:STM32F103串口配置,并且使用printf进行打印

上一篇:stm32 printf函数重定向
下一篇:STM32库函数编程思路总结及其与寄存器编程的对比剖析

推荐阅读最新更新时间:2024-03-16 16:23

STM32使用CubeMAX配置串口中断接收方法
STM32使用cubeMAX可以快速建立工程模板,但是默认使用的是Hal库构成的工程,对于习惯使用了ST标准库的同学来说,灵活调用HAL库可能会比较生疏,我也是这么觉得的,但是还是要逐步去接触学习它,毕竟这个hal库的封装还是相当好的,有好多先进的思想和用法。 在学习过程中,我遇到了一个问题,之前也遇到过,但是没时间去研究,就是串口在CUBUMAX上配置好后,如何实现串口中断接收,接下来就来记录一下我学习到的知识: 1.定位串口中断发生的地方 HAL库的中断处理还是和标准库一样的,在stm32xxxx_it.c中定义我们定位到如下函数: HAL_UART_IRQHandler(&huart1); 再往下定位,我们找
[单片机]
基于STM32F103的任意I/O口矩阵键盘驱动程序
网上的矩阵键盘代码非常非常多,但绝大部分都是要连续I/O口的,就比如PA0-PA7、PB3-PB10等等等,这些都要用到一排的连续的单片机引脚。用过STM32单片机的都知道,STM32单片机一排过去连续的引脚的不是很多,就算刚好出现了一排PA0-PA10,可是呢,PA2、PA3串口2要用,PA9、PA10串口1要用,这就显得比较局限。而且市面上的那些很多都是修改引脚要全文上下一处处修改,麻烦且容易错漏。所以如果我矩阵键盘的引脚可以随便定义的话那么是不是就不用愁这个问题了? 所以,这就是我给大家带来的任意可用的I/O的矩阵键盘程序,按键扫描代码直接操纵IO口,得出按键值。用法很简单:先看下图 我们看到,在key4_4.c中已经
[单片机]
基于<font color='red'>STM32F103</font>的任意I/O口矩阵键盘驱动程序
STM32M CUBE实现printf打印调试信息以及实现单字节接收
在写单片机程序时我们一般喜欢使用printf来通过串口打印调试信息,但这个函数是不可以直接使用的,必须做点对库函数的改动。 STM32M CUBE是ST官方提供的库以及初始化工具,很好很强大,但是在UART方面值提供了如下函数: HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16
[单片机]
嵌入式单片机之STM32F103C8T6最小系统板电路设计参考
 一。电源部分   设计了一个XH插座,以便使用3.7V锂电池供电,接入电压不允许超过6V。   二。指示灯部分   电源指示灯可以通过一个短路帽控制亮灭,以达到节电的目的。   三。复位电路   四。按键电路   KEY_1为用户自己定义   RST复位按键   WKUP为唤醒按键。   RST按键的作用:   程序下载的方式是SWD模式,BOOT0和BOOT1都接地,单片机一上电就会执行用户程序,所以不支持串口下载。   五。OLED电路   支持IIC和SPI两种通信模式   六。扩展口   七。电源部分   TIM1的CH1和CH2输出PWM控制一个轮子的转速。   TIM1的CH3和CH
[单片机]
嵌入式单片机之<font color='red'>STM32F103</font>C8T6最小系统板电路设计参考
STM32F103RC 一上电重复重启
现象:烧了有看门狗的程序,就正常;反之,一直在重启。 原因:之前用STM32 ST-LINK Utility 烧写程序时,Options Bytes设置错误。正确的是默认选上WDG_SW、nRST_STOP、nRST_STDBY。不勾选WDG_SW,代表选择硬件看门狗,因程序中没有喂狗,故一直重启
[单片机]
STM32F103使用DAC功能输出三角波
在DAC的主要特征中可以看出,DAC内部还带有波形发生器。 DAC 主要特征 2个DAC转换器:每个转换器对应1个输出通道 8位或者12位单调输出 12位模式下数据左对齐或者右对齐 同步更新功能 噪声波形生成 三角波形生成 双DAC通道同时或者分别转换 每个通道都有DMA功能 外部触发转换 输入参考电压V REF+ 比如我们要输出一个三角波,就不需要自己去计算三角波每个点的电压是多少,通过内部自带的三角波发生器,就可以产生三角波。具体的操作步骤在官方文档中也有介绍。 三角波生成 可以在DC或者缓慢变化的信号上加上一个小幅度的三角波。设置WAVEx 位为’10’选择DAC的三角波生成功能。设置DAC_CR寄存器的
[单片机]
<font color='red'>STM32F103</font>使用DAC功能输出三角波
51单片机使用printf函数带参数打印不正常的解决办法
本人在调试STC8A8K64S4单片机时遇到一个很奇葩的问题,使用printf函数打印一个带参数的调试信息时出现异常,具体表现定义了8位的变量使用%X格式打印出的值却变成了16位,且赋值为0后任然打印出16位的随即数值。由于之前使用stm32单片机一直使用printf打印没有出现过类似情况,因此没有怀疑是函数问题而是怀疑是否为单片机某处寄存器设置错误。在看了很久手册之后没发现问题,最后自己写了一个带参数打印的函数发现数值没有错误。由于项目匆忙未继续深入探究原因,只能初步断定在51单片机使用printf函数带参数打印时数值不正常。 当然使用printf带参数打印调试是非常方便的,因此我尝试使用sprintf先将参数装到一个buf
[单片机]
100引脚的stm32f103v如何使用FSMC连接LCD
关于使用FSMC连接stm32和LCD的使用,网上大多都是STM32F103Z系列的,这个系列是144引脚的,FSMC_A还是比较齐全的。但对于只有100引脚的stm32f103v系列来说,地址线有些是不存在的,那么我们如何使用8080 的接口方式使用FSMC总线连接LCD呢?说白了就是RS,CS,RD,WR的这几根线该怎么连接呢? 整合网络资料,归结如下 经过查看数据手册 RS可选为PD11 PD12 PD13任意一个。 上图是贝一特科技的ze彩屏接口。 WR选PD5 ,RD选PD4 cs选则PD7. 关于其使用 //写16位数据函数 #define Bank1_LCD_D ((uin
[单片机]
100引脚的<font color='red'>stm32f103</font>v如何使用FSMC连接LCD
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved