STM32串口usart发送数据

发布时间: 2024-08-14
来源: 电子工程世界

主函数请直接关注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_

4 void usart1_config();

7 #endif


文章来源于: 电子工程世界 原文链接

本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。