高中生
最后登录1970-1-1
在线时间 小时
注册时间2019-7-17
|
我的串口发送函数和历程一模一样,为什么达不到效果呢?
其他的发送字符串都行,只有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
|
|