void USART1_Configuration()//設置USART1
{ GPIO_InitTypeDef GPIO_InitStructure;//設置GPIO口用的結(jié)構(gòu)體 USART_InitTypeDef USART_Init_Structure;//設置USART的結(jié)構(gòu)體 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//這個管腳接TXD GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//選擇復用推挽式輸出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHZ; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//這個管腳接RXD GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//選擇浮空輸入 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHZ; GPIO_Init(GPIOA,&GPIO_InitStructure); USART_Init_Structure.USART_BaudRate=9600;//設置波特率(每秒鐘傳輸?shù)奈粩?shù)) USART_Init_Structure.USART_StopBits=USART_StopBits_1;//選擇停止位 為1位 USART_Init_Structure.USART_Party=UART_Party_No;//不用奇偶校驗 USART_Iinit_Structure_USART_HardwareFlowcontrol=USART_HardwareFlowcontrol_None;//不使用硬件流控制 USART_InitStructure_USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//選擇USART的接收和發(fā)送使能 USART_Init(USART1,&USART_InitStructure); USART_Cmd(USART1,ENABLE);//使能USART1; } 經(jīng)過這樣的設置USART1就可以用了 使用USART_SendData(USART1,待發(fā)送數(shù)據(jù)); 也可以使用重映射過的 printfh 函數(shù)來發(fā)送數(shù)據(jù). 重映射過程如下 Int fputc(intch,FILE *f)//需要添加 stdio.h 頭文件 { USART_SendData(USART1,ch); while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);//這段話表示如果發(fā)送數(shù)據(jù)沒有結(jié)束 就聽在這里等待 } 經(jīng)過以上的配置可以發(fā)送和接受數(shù)據(jù) 但是不能產(chǎn)生USART中斷 需要USART中斷可以 這樣設置 voidNVIC_Configuration() { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.IROChannel=USART1_IRQn; NVIC_InitStructure.IRQChannelPreemPtionPriority=0; NVIC_InitStructure.IRQChannelSubPriority=0; NVIC_InitStructure.IPQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStructure); }
|