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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论