先是参阅http://wenku.baidu.com/view/78f6b1350b4c2e3f572763e9.html调通了usart1
然后将程序进行修正,对Usart2进行装备,装备完了之后,程序仍是没有正确,然后在voidGPIO_cfg();函数中增加一句
GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);
最终程序如下,
#include“stm32f10x_lib.h”
FlagStatusRX_status;
FlagStatusTx_status;
voidRCC_cfg(void);
voidGPIO_cfg(void);
voidUSART_cfg(void);
voidNVIC_cfg(void);
unsignedcharRxbuf[20];
inTIndex_send,index_rev;
u8flag;
intmain()
{
inTI;
unsignedcharTxBuf1[]=“WelcometomySTM32!I‘midiot!”;
index_send=0;
index_rev=0;
flag=0;
RCC_cfg();
GPIO_cfg();
NVIC_cfg();
USART_cfg();
//铲除标志位,不然第1位数据会丢掉
USART_ClearFlag(USART2,USART_FLAG_TC);
//发送数据
//PB5的作用是显现正在发送数据
//当有数据在发送的时分,PB5会亮
for(i=0;TxBuf1[i]!=’\0‘;i++)
{
USART_SendData(USART2,TxBuf1[i]);
GPIO_SetBits(GPIOB,GPIO_Pin_5);
//等候数据发送结束
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}
while(1)
{
}
}
//RCC时钟装备
voidRCC_cfg()
{
//将RCC寄存器从头设置为默认值
RCC_DeInit();
//翻开GPIO时钟,复用功用,串口1的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
}
//IO口装备
voidGPIO_cfg()
{
GPIO_InitTypeDefGPIO_InitStructure;
//PAD5作为US2的TX端,翻开复用,担任发送数据
GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);
GPIO_StrucTInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOD,&GPIO_InitStructure);
//PD6作为US2的RX端,担任接纳数据
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOD,&GPIO_InitStructure);
//LED显现串口正在发送/接纳数据
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
//串口初始化
voidUSART_cfg()
{
USART_InitTypeDefUSART_InitStructure;
//将结构体设置为缺省状况
USART_StructInit(&USART_InitStructure);
//波特率设置为115200
USART_InitStructure.USART_BaudRate=115200;
//一帧数据的宽度设置为8bits
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
//在帧结束传输1个中止位
USART_InitStructure.USART_StopBits=USART_StopBits_1;
//奇偶失能形式,无奇偶校验
USART_InitStructure.USART_Parity=USART_Parity_No;
//发送/接纳使能
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
//硬件流操控失能
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
//设置串口2
USART_Init(USART2,&USART_InitStructure);
//翻开串口2的中止响应函数,接纳中止
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
//翻开串口2
USART_Cmd(USART2,ENABLE);
}
//装备中止
voidNVIC_cfg()
{
NVIC_InitTypeDefNVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//挑选中止分组2
NVIC_InitStructur