野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11341|回复: 2

我的串口发送函数和历程一模一样,为什么达不到效果呢?

[复制链接]
发表于 2019-7-17 10:43:15 | 显示全部楼层 |阅读模式
我的串口发送函数和历程一模一样,为什么达不到效果呢?
其他的发送字符串都行,只有printf函数不行



#include "stm32f10x.h"
#include "bsp_usart.h"
#include "bsp_led.h"

主函数
int main(void)
{
//        uint8_t a[10]={100,2,3,4,5,6,7,8,9,10};
//        LED_GPIO_Init();
         Usart_Config();
//        Usart_SendByte(USART1, 'A');//发送一字节
//       
//  Usart_SendHalfWord( USART1, 0xff56);//发送两字节
//       
//        Usart_SendArray( USART1, a,10);//发送数组
//       
//         Usart_SendStr( USART1 , "欢迎使用秉火STM32F103开发板" );
        printf( "串口printf函数测试\n" );

        while(1)
        {
               
        }
}


bsp_usart.c文件
#include "bsp_usart.h"
#include "stm32f10x.h"

void Usart_Config(void)
{
        GPIO_InitTypeDef GPIO_Struct;
        USART_InitTypeDef USART_Struct;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
        //初始化TX
        GPIO_Struct.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Struct.GPIO_Pin = GPIO_Pin_9;
        GPIO_Struct.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_Struct);
        //初始化RX
        GPIO_Struct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Struct.GPIO_Pin = GPIO_Pin_10;
        GPIO_Init(GPIOA, &GPIO_Struct);
       
        //初始化USART
        USART_Struct.USART_BaudRate = 115200;
        USART_Struct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_Struct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
        USART_Struct.USART_Parity = USART_Parity_No;
        USART_Struct.USART_StopBits = USART_StopBits_1 ;
        USART_Struct.USART_WordLength = USART_WordLength_8b;
        USART_Init(USART1, &USART_Struct);
       
        USART_Cmd(USART1, ENABLE);
       
}
/*发送一个字节*/
void Usart_SendByte( USART_TypeDef* USARTx, uint8_t Date)
{
        USART_SendData(USARTx, Date);
        while( USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET );
}

/*发送两个字节*/
void Usart_SendHalfWord( USART_TypeDef* USARTx, uint16_t  Date)
{
        uint8_t  temp_h, temp_l;
        temp_h = (Date&0xff00) >> 8;
        temp_l = (Date&0xff);
        USART_SendData(USARTx, temp_h);
        while( USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET );
       
        USART_SendData(USARTx, temp_l);
        while( USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET );
}

/*发送一个数组*/
void Usart_SendArray( USART_TypeDef* USARTx,uint8_t *array, uint8_t num)
{
        uint8_t i;
        for(i=0;i<num;i++)
        {
                Usart_SendByte(USARTx, array[i]);
               
        }
        while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET );
}


/*发送字符串*/
void Usart_SendStr(USART_TypeDef* USARTx, uint8_t * Str)
{
        uint8_t i = 0;
        do
        {
                Usart_SendByte(  USARTx, *(Str + i));
                i++;
        }while(*(Str+i) != '\0');
        while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET );
}


///重定向c库函数printf到串口,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{
                /* 发送一个字节数据到串口 */
                USART_SendData(USART1, (uint8_t) ch);
               
                /* 等待发送完毕 */
                while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);               
       
                return (ch);
}

///重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{
                /* 等待串口输入数据 */
                while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);

                return (int)USART_ReceiveData(USART1);
}




bsp_usart.h文件
#ifndef __BSP_USART_H
#define __BSP_USART_H
#include "stm32f10x.h"
#include <stdio.h>

void Usart_Config(void);
void Usart_SendByte( USART_TypeDef* USARTx, uint8_t Date);
void Usart_SendHalfWord( USART_TypeDef* USARTx, uint16_t Date);
void Usart_SendArray( USART_TypeDef* USARTx,uint8_t *array, uint8_t num);
void Usart_SendStr(USART_TypeDef* USARTx, uint8_t *Str);


#endif













回复

使用道具 举报

 楼主| 发表于 2019-7-17 10:43:44 | 显示全部楼层
求大神,帮忙解答一下,谢谢
回复 支持 反对

使用道具 举报

发表于 2019-7-17 16:47:15 | 显示全部楼层
注意要勾选 use micro lib库的选项
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 03:44 , Processed in 0.026406 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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