★ 可以直接複製貼上到 C 語言開發環境中,此程式碼可以直接編譯執行(只要你配置好開發環境與硬體)。
執行結果: 輸入 A 之後會自動回傳 ok 訊息
程式碼:
#include "stm32f10x.h"
int i;
void My_Usart1_Send(char *string){
while(*string){
/* 傳送訊息至 USART1 */
USART_SendData(USART1, (unsigned short int) *string++);
/* 等待訊息傳送完畢 */
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}
}
int main(){
/******** 宣告 USART、GPIO 結構體 ********/
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
/******** 啟用 GPIOA、USART1 的 RCC 時鐘 ********/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1, ENABLE);
/******** 設定 PA9 為 Tx 覆用 ********/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化 PA9
/******** 設定 PA10 為 Rx 覆用 ********/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化 PA10
/******** USART 基本參數設定 ********/
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(USART1, &USART_InitStructure); // 初始化 UART1
USART_Cmd(USART1, ENABLE); // 啟用 USART1
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
/* 啟用 USART1 中斷 */
NVIC_EnableIRQ(USART1_IRQn);
while(1){
// for(i = 0; i<5000000; i++);
// My_Usart1_Send("Hello Kitty \n");
}
}
void USART1_IRQHandler(){
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){
// 如果收到 A 字元,則發送 ok 字串
if((char)USART_ReceiveData(USART1) == 'A')
{
My_Usart1_Send("ok \n");
}
}
}
全站熱搜