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

首先要配置串口时钟:

  1. // USART1 clock enable 

  2.  

    RCC_APB2PeriphClockCmd(

  3.  

    RCC_APB2Periph_USART1 |

  4.  

    RCC_APB2Periph_GPIOA |

  5.  

    RCC_APB2Periph_AFIO, ENABLE);

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

  1. void USART1_Init(void)

  2.  

    {

  3.  

    /////// config the gpio

  4.  

    GPIO_InitTypeDef GPIO_InitStructure;

  5.  

  6.  

    /* PA9 USART1_Tx */

  7.  

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

  8.  

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  9.  

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //

  10.  

    GPIO_Init(GPIOA, &GPIO_InitStructure);

  11.  

    /* PA10 USART1_Rx */

  12.  

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

  13.  

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//

  14.  

    GPIO_Init(GPIOA, &GPIO_InitStructure);

  15.  

  16.  

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

  17.  

  18.  

    USART_InitTypeDef USART_InitStructure;//

  19.  

  20.  

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

  21.  

    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//

  22.  

    USART_InitStructure.USART_StopBits = USART_StopBits_1;//

  23.  

    USART_InitStructure.USART_Parity = USART_Parity_No;//

  24.  

    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

  25.  

    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//

  26.  

  27.  

    //config clock

  28.  

    USART_ClockInitTypeDef USART_ClockInitStructure;

  29.  

  30.  

    USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;

  31.  

    USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;

  32.  

  33.  

    USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;

  34.  

    USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;

  35.  

  36.  

    USART_ClockInit(USART1, &USART_ClockInitStructure);

  37.  

  38.  

    /* Configure USART1 */

  39.  

    USART_Init(USART1, &USART_InitStructure);//

  40.  

  41.  

    /* Enable the USART1 */

  42.  

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

  43.  

  44.  

    }

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

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

  1. int fputc(int ch, FILE *f)

  2.  

    {

  3.  

    /* 给USART写一个字符 */

  4.  

    USART_SendData(USART1, (uint8_t) ch);

  5.  

  6.  

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

  7.  

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

  8.  

  9.  

    return ch;

  10.  

    }

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

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

原文地址:https://www.cnblogs.com/lijf/p/10405785.html

时间: 2024-07-30 16:43:48

STM32F103串口配置,并且使用printf进行打印的相关文章

树莓派相关-树莓派串口配置方法

树莓派是否能够使用串口呢,答案是肯定的 ,以下是具体方法 1.树莓派的第一排的第三,四,五个分别,也就是下图的6,8,10三个端口分别是地,TX与RX,与被连接设备连接起来.注意树莓派的TX要连接从设备的RX,树莓派的RX要连接树莓派的TX 2.树莓派上只有一个串口,系统默认将它作为调试口,所以不能直接当成普通串口进行编程和使用,需要先将调试口的配置去掉,再使用.此处需要修改两处文件 2.1  修改/boot/cmdline.txt 在终端输入如下指令 sudo nano /boot/cmdli

串口配置流程

串口配置流程 1.保存原串口信息,使用tcgetattr()函数; struct termios newtio, oldtio; tcgetattr(fd, &oldtio); 2.激活选项有CLOCAL和CREAD,用于本地连接和接收使能; newtio.c_cflag |= CLOCAL | CREAD; 3.设置波特率,使用函数cfsetispeed()和cfsetospeed(); cfsetispeed(&newtio, B115200); cfsetospeed(&ne

Linux 查看串口配置 去除回显

Linux 查看串口配置 Stty -F /dev/ttyUSB0 去掉串口回显 Stty -F /dev/ttyUSB0 -echo 监控串口数据接收 Cat /dev/ttyUSB0 & 原文地址:https://www.cnblogs.com/liushuhe1990/p/9609039.html

Python直接调用C库的printf()函数打印一条消息

github博客传送门 csdn博客传送门 话不多说直接上代码 # 直接从 C 库中调用 printf()函数打印一条消息 # Windows 中的 C 库位于 C:\WINDOWS\system32\msvcrt.dll,Linux 中的 C 库位于/lib/libc.so.6 import ctypes # 导入ctypes包 # msvcrt = ctypes.cdll.LoadLibrary("C:\WINDOWS\system32\msvcrt.dll") # 等同于msvc

X210串口配置与stdio移植

串口控制器初始化关键步骤 (1)初始化串口的Tx和Rx引脚所对应的GPIO(查原理图可知Rx和Rx分别对应GPA0_1和GPA0_0) (2)GPA0CON(0xE0200000),bit[3:0] = 0b0010 bit[7:4] = 0b0010 (3)初始化这几个关键寄存器UCON0 ULCON0 UMCON0 UFCON0 UBRDIV0 UDIVSLOT0主要的几个寄存器 (1)ULCON0 = 0x3 // 0校验位.8数据位.1停止位 (2)UCON = 0x5 // 发送和接收

树莓派相关-树莓派串口配置方法(转)

转:http://blog.csdn.net/yangqicong11/article/details/26571787 树莓派是否能够使用串口呢,答案是肯定的 ,以下是具体方法 1.树莓派的第一排的第三,四,五个分别,也就是下图的6,8,10三个端口分别是地,TX与RX,与被连接设备连接起来.注意树莓派的TX要连接从设备的RX,树莓派的RX要连接树莓派的TX 2.树莓派上只有一个串口,系统默认将它作为调试口,所以不能直接当成普通串口进行编程和使用,需要先将调试口的配置去掉,再使用.此处需要修改

printf格式化打印

格式代码 A ABC ABCDEFGH %S A ABC ABCDEFGH %5S ####A ##ABC ABCDEFGH %.5S A ABC ABCDE %5.5S ####A ##ABC ABCDE %-5S A#### ABC## ABCDEFGH Printf 格式化字符串 格式代码 1 -12 12345 123456789 %d 1 -12 12345 123456789 %6d #####1 ###-12 #12345 123456789 %.4d 0001 -0012 123

hive中的几个参数:元数据配置、仓库位置、打印表字段相关参数

hive仓库位置由以下参数决定,默认位置/user/hive/warehouse: <property>         <name>hive.metastore.warehouse.dir</name>         <value>/user/hive/warehouse</value>     </property> hive中元数据配置: <property>         <name>javax.j

STM32F103 ------ 时钟配置

由于stm32的库默认是外部晶振8M的情况下实现的,所以配置波特率的时候也是按8M,包括主频,如果用12M晶振就需要改动几个地方: 在system_stm32f10x.c中找到相应类型的文件,进行如下修改. 1)72M主频: 8M时: RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9); 12M: RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMU