zoukankan      html  css  js  c++  java
  • 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
    ");                        //用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
  • 相关阅读:
    Android Studio3.1.2编译时Java Compiler出错:Warning: Failed to parse host proxy3.bj...
    Android RxJava 2 的用法 just 、from、map、subscribe、flatmap、Flowable、Function、Consumer ...【转】
    Android DevArt6:Android中IPC的六种方式
    Android 深入浅出
    Eclipse代码自动补全
    Android 深入浅出
    Android 深入浅出
    Android中查看SQLite中字段数据的两种方式
    Android Studio 打包时 Signature Version 选择V1还是V2 ?
    Android进阶AIDL
  • 原文地址:https://www.cnblogs.com/kinson/p/7898359.html
Copyright © 2011-2022 走看看