主函數請直接關注41行到47行代碼!!
1 #include "stm32f10x.h" // 相當於51單片機中的 #include <reg51.h> 2 #include "stm32f10x_gpio.h" 3 #include "stm32f10x_usart.h" 4 #include "led.h" 5 #include "key.h" 6 #include "key interrupt.h" 7 #include "delay.h" 8 #include "usart1.h" 9 #include "stdio.h" 10 #include "usart.h" 11 12 int main() 13 { 14 /* 15 * 一、點亮一個LED燈 16 */ 17 18 /*點亮一個LED燈*/ 19 //red_on();//紅燈 20 //green_on();//綠燈 21 //blue_on();//藍燈 22 23 /* 24 * 二、按鍵通過按鍵實現控制led的亮滅(有兩種情況) 25 */ 26 27 //key1(); 28 //key2(); 29 //key3(); 30 31 /* 32 * 三、按鍵K1,K2中斷控制LED亮滅 33 */ 34 35 //interrupt();//詳細代碼見key interrupt.c文件 36 37 /* 38 * 四、串口 39 */ 40 41 usart1_config(); //串口初始化 42 USART_SendData(USART1,'A'); //發送數據A 43 printf("kinson\n"); //用printf打印數據kinson,說明:printf默認打印輸出在控制台,現在修改源碼打印輸出至串口 44 while(1); 45 46 47 /* 48 * 五、 Systick時鍾定時 49 */ 50 51 /* 52 SystemInit();//初始化系統,使得系統頻率為72兆 53 54 //配置Systick為10us中斷一次,時間到后觸發定時中斷 55 //進入stm32fxx_it.c文件的SysTick_Handle處理,通過數中斷次數計時 56 57 led_gpio_init();//LED端口初始化 58 while(1) 59 { 60 61 GPIO_Setbits(GPIO,GPIO_Pin_15); 62 delay_ms(1000);//延時 63 GPIO_ResetBits(GPIO,GPIO_Pin_15); 64 delay_ms(1000);//延時 65 while(1); 66 } 67 */ 68 }
新建一個文件配置串口usart相關的配置
1 #include "usart1.h" 2 #include "stm32f10x.h"//相當於stdio頭文件 3 #include "stm32f10x_gpio.h"//配置GPIO要用的頭文件 4 #include "stm32f10x_usart.h"//配置串口usart要用的頭文件 5 #include "misc.h" //配置中斷NVIC要用的頭文件 6 #include "stdio.h" //為printf所用 7 8 /*串口1的配置函數*/ 9 void usart1_config() 10 { 11 //第一步:時鍾配置(GPIO時鍾,串口時鍾) 12 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1|RCC_APB2Periph_AFIO,ENABLE); 13 //第二步,GPIO配置,Rx(接受)為PA10,Tx(發送)為PA9 14 GPIO_InitTypeDef a; //定義結構體 15 /*配置PA9為復用推挽輸出*/ 16 a.GPIO_Pin=GPIO_Pin_9; //端口9,依據來源看電路圖 17 a.GPIO_Speed=GPIO_Speed_50MHz; 18 a.GPIO_Mode=GPIO_Mode_AF_PP; //復用推挽輸出 19 GPIO_Init(GPIOA,&a); //初始化 20 21 /*配置PA10為浮空輸入*/ 22 a.GPIO_Pin=GPIO_Pin_10; 23 a.GPIO_Mode=GPIO_Mode_IN_FLOATING; //浮空輸入 24 a.GPIO_Speed=GPIO_Speed_50MHz; 25 GPIO_Init(GPIOA,&a); 26 27 //第二步:NVIC配置 28 /*NVIC嵌套向量中斷控制器*/ 29 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //優先級配置 30 NVIC_InitTypeDef b; 31 b.NVIC_IRQChannel = USART1_IRQn;//USART1_IRQn串口中斷 32 b.NVIC_IRQChannelPreemptionPriority = 1;//0 1 2 3 4 33 b.NVIC_IRQChannelSubPriority = 1;//0 1 2 3 4 34 b.NVIC_IRQChannelCmd = ENABLE; //使能 35 NVIC_Init(&b); 36 37 //第三步:串口配置 38 USART_InitTypeDef c; 39 c.USART_BaudRate=9600; //波特率 40 c.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//硬件控制流 41 c.USART_Mode=USART_Mode_Rx|USART_Mode_Tx; //模式,此模式為發送和接受 42 c.USART_WordLength=USART_WordLength_8b;//字長8 43 c.USART_Parity=USART_Parity_No; //奇偶校驗n 44 c.USART_StopBits=USART_StopBits_1; //停止位1 45 USART_Init(USART1,&c); 46 //第四步:串口時能 47 USART_Cmd(USART1,ENABLE); 48 } 49 50 51 52 53 /*以下代碼為printf能在發送數據給串口所用*/ 54 int fputc(int ch,FILE* ffdsfa) 55 { 56 USART_SendData(USART1,ch); 57 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);//等待發送完成 58 return ch; 59 } 60 61 62 63 64 65 66
新建.h文件(不同文件之間的函數調用必須掌握的知識點)
1 #ifndef _USART1_H_ 2 #define _USART1_H_ 3 4 void usart1_config(); 5 6 7 #endif
