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 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