官方的例子总是毛病百出,首先打印出来,接收不连续,本来发送一个字符串,结果这个字符串被拆分成好几段,不知道为何,关键是中间停靠时间较长,观察是在下次发送时候,才发送了上次的后半截。。。很奇特,因为用的官方的库函数,不知道是不是有问题。
然后我重写了例子,发现问题好多了,然而在接收配置中,设置了每次接收后换行,又出问题了。
这是什么问题呢?
#include "delay.h"
#include "sys.h"
#include "led.h"
/********************************************************************************************************
**函数信息 :main(void)
**功能描述 :
**输入参数 :无
**输出参数 :无
********************************************************************************************************/
int fputc(int ch, FILE *f)
{
while((UART1->CSR&UART_IT_TXIEN)==0);//循环发送,直到发送完毕
UART1->TDR = (ch & (uint16_t)0x00FF);
return ch;
}
int main(void)
{
unsigned int x=0;
UART_InitTypeDef UART_Uart1;
GPIO_InitTypeDef GPIO_InitStructure;
UART_Uart1.UART_BaudRate =115200;
UART_Uart1.UART_HardwareFlowControl =UART_HardwareFlowControl_None;
UART_Uart1.UART_Mode =UART_Mode_Rx | UART_Mode_Tx;
UART_Uart1.UART_Parity =UART_Parity_No;
UART_Uart1.UART_StopBits =UART_StopBits_1;
UART_Uart1.UART_WordLength =UART_WordLength_8b;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_UART1, ENABLE); //使能UART1,GPIOA时钟
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //开启GPIOA,GPIOB时钟
//UART 初始化设置
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);
UART_DeInit(UART1);
UART_Init(UART1,&UART_Uart1);
UART_Cmd(UART1, ENABLE);
//UART1_TX GPIOA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9
//UART1_RX GPIOA.10初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10
delay_init();
LED_Init();
while(1)
{
delay_ms(2000);
printf("Hello Blink.....%d\n",x++);
LED1_TOGGLE();
}
}
|
为什么官网的例程串口没反应,用你的还没反应,修改为串口2还没反应,崩溃中。。。。。。。。
工程与串口软件在5楼