STM32串⼝usart发送数据
主函数请直接关注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
12int 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默认打印输出在控制台,现在修改源码打印输出⾄串⼝44while(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的配置函数*/
9void 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//第三步:串⼝配置
模拟串口使用printf函数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能在发送数据给串⼝所⽤*/
54int fputc(int ch,FILE* ffdsfa)
55 {
56    USART_SendData(USART1,ch);
57while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);//等待发送完成
58return  ch;
59 }
60
61
62
63
64
65
66
新建.h⽂件(不同⽂件之间的函数调⽤必须掌握的知识点)
1 #ifndef _USART1_H_
2#define _USART1_H_
3
4void usart1_config();
5
6
7#endif