主函数请直接关注41行到47行代码!!
1 #include 'stm32f10x.h' // 相当于51单片机中的 #include
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('kinsonn'); //用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