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模式時鐘設置