STM32學習【2】STM32F103C8T6串口2USART2程序

       STM32F103C8T6串口1(PA10/RXD1,PA9/TXD1)用來燒寫程序,串口2(PA3/RXD2,PA2/TXD2)接串口模塊與電腦串口助手通信。IO口PA1接LED+470R電阻+D3V3。

       調試後,能正常運行的程序如下:


#include "stm32f10x.h"
#include "stm32f10x_usart.h"

#define LED_ON  GPIO_ResetBits(GPIOA ,GPIO_Pin_1)
#define LED_OFF GPIO_SetBits(GPIOA ,GPIO_Pin_1)

void GPIO_Config(void);
void USART2_Config(void);
void RCC_Config(void);

void  Delay(u32 nCount)
{
	for(; nCount != 0; nCount--);
}

int main(void)
{
	RCC_Config();   //時鐘設置
	GPIO_Config();
	USART2_Config();

	while(1)
	{
		LED_OFF;
		Delay(0xfffff);
		Delay(0xfffff);
		Delay(0xfffff);
		Delay(0xfffff);
		Delay(0xfffff);
		Delay(0xfffff);
		USART_SendData(USART2,0x12);
		LED_ON;
		Delay(0xfffff);
		Delay(0xfffff);
		Delay(0xfffff);
		Delay(0xfffff);
		Delay(0xfffff);
		Delay(0xfffff);
	}
}

void RCC_Config(void)
{
	/*開啓外設時鐘*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
}

void GPIO_Config(void){
	GPIO_InitTypeDef GPIO_InitStructure;	  //定義一個結構體變量
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
   	GPIO_Init(GPIOA, &GPIO_InitStructure);	 //初始化庫函數

	//PA2 TXD2
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   	GPIO_Init(GPIOA, &GPIO_InitStructure);	

	//PA3 RXD2
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; 
  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
   	GPIO_Init(GPIOA, &GPIO_InitStructure);	 
}

void USART2_Config(void)
{
	USART_InitTypeDef USART_InitStructure;

    USART_InitStructure.USART_BaudRate = 9600;
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
	USART_InitStructure.USART_StopBits = USART_StopBits_1;
	USART_InitStructure.USART_Parity = USART_Parity_No;
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
	USART_Init(USART2, &USART_InitStructure); 

	USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); 	//開啓接收中斷
	USART_ITConfig(USART2, USART_IT_TXE, ENABLE);	//開啓發送中斷
	USART_Cmd(USART2, ENABLE);
}

       程序編寫過程中出現的問題:

       1、時鐘設置函數void RCC_Config(void)中

       RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

       若寫成

       RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

       程序編譯能夠通過,但燒寫後,程序無法正常運行。


       2、若沒有配置串口USART2(PA3/RXD2,PA2/TXD2)對應IO口的輸入輸出模式,編譯能夠通過,但程序無法正常運行。

       PA2/TXD2應配置爲

       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

       PA3/RXD2配置爲

       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;


       以上問題的具體解釋都可以在STM32固件函數庫用戶手冊找到。

       APB1時鐘設置



       GPIO模式時鐘設置



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章