数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 1806|回复: 0

[STM] STM32学习记录Usart串口

[复制链接]
发表于 2021-3-10 14:22:09 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
printf函数重新指定输出
原因:STM32里没有printf函数,由于习惯方便,把系统屏幕打印函数从新指定输出方向到串口,具体函数功能还没研究
如果不用printf,也可以直接用库里的USART_SendData(USART1,(u8)ch);

放在程序里就可以直接使用printf输出到串口
int fputc(int ch,FILE *p) //函数默认的,在使用printf函数时自动调用
{
USART_SendData(USART1,(u8)ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
return ch;
}
串口及其对应IO配置,串口是定义好针脚的,我的芯片是GPIOA的9跟10
因为串口配置对应针脚是固定的,所以把IO与串口放在一起配置了,算是一个整体
void UsartIO_Set(void)
{
          GPIO_InitTypeDef GPIO_InitStructure;
          USART_InitTypeDef USART_InitStructure;                                    //这两个也是固定声明格式
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);      //IO时钟
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);   //串口时钟
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);       //IO复用时钟 意思是这个口本来是IO用,现在用它干别的就算复用
                                                                                                        //凡是用IO口不干输入输出,就都算复用
    //USART1 Tx(PA.09)
    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);                                           //针脚发送与接收分开配置,配置完还得分别把配置信息发送给处理器
    //USART1 Rx(PA.10)
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;            //接收脚配置成输入
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    USART_InitStructure.USART_BaudRate = 9600;                                       //波特率
    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_Tx | USART_Mode_Rx; //模式
    USART_Init(USART1, &USART_InitStructure);      //把串口配置带入处理器
    USART_Cmd(USART1, ENABLE);                        //启用串口
}
串口输出hello world
int main(void)
{            
        UsartIO_Set();  //配置设备信息
        while(1)
              {
                           printf("hello world!");     //每秒串口输出一次
                           Delayms(1000);            //加个延时方便观察串口输出
              }
}
您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-18 21:57 , Processed in 0.140401 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表