★ 可以直接複製貼上到 C 語言開發環境中,此程式碼可以直接編譯執行(只要你配置好開發環境與硬體)。

執行結果: 輸入 A 之後會自動回傳 ok 訊息

111  

程式碼:

#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");           
        }
    }
 






arrow
arrow
    全站熱搜

    黃彥霖 發表在 痞客邦 留言(1) 人氣()