主函数请直接关注41行到47行代码!!

 #include "stm32f10x.h"   // 相当于51单片机中的  #include <reg51.h>
#include "stm32f10x_gpio.h"
#include "stm32f10x_usart.h"
#include "led.h"
#include "key.h"
#include "key interrupt.h"
#include "delay.h"
#include "usart1.h"
#include "stdio.h"
#include "usart.h" int main()
{
/*
* 一、点亮一个LED灯
*/ /*点亮一个LED灯*/
//red_on();//红灯
//green_on();//绿灯
//blue_on();//蓝灯 /*
* 二、按键通过按键实现控制led的亮灭(有两种情况)
*/ //key1();
//key2();
//key3(); /*
* 三、按键K1,K2中断控制LED亮灭
*/ //interrupt();//详细代码见key interrupt.c文件 /*
* 四、串口
*/ usart1_config(); //串口初始化
USART_SendData(USART1,'A'); //发送数据A
printf("kinson\n"); //用printf打印数据kinson,说明:printf默认打印输出在控制台,现在修改源码打印输出至串口
while(); /*
* 五、 Systick时钟定时
*/ /*
SystemInit();//初始化系统,使得系统频率为72兆 //配置Systick为10us中断一次,时间到后触发定时中断
//进入stm32fxx_it.c文件的SysTick_Handle处理,通过数中断次数计时 led_gpio_init();//LED端口初始化
while(1)
{ GPIO_Setbits(GPIO,GPIO_Pin_15);
delay_ms(1000);//延时
GPIO_ResetBits(GPIO,GPIO_Pin_15);
delay_ms(1000);//延时
while(1);
}
*/
}

新建一个文件配置串口usart相关的配置

 #include "usart1.h"
#include "stm32f10x.h"//相当于stdio头文件
#include "stm32f10x_gpio.h"//配置GPIO要用的头文件
#include "stm32f10x_usart.h"//配置串口usart要用的头文件
#include "misc.h" //配置中断NVIC要用的头文件
#include "stdio.h" //为printf所用 /*串口1的配置函数*/
void usart1_config()
{
//第一步:时钟配置(GPIO时钟,串口时钟)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1|RCC_APB2Periph_AFIO,ENABLE);
//第二步,GPIO配置,Rx(接受)为PA10,Tx(发送)为PA9
GPIO_InitTypeDef a; //定义结构体
/*配置PA9为复用推挽输出*/
a.GPIO_Pin=GPIO_Pin_9; //端口9,依据来源看电路图
a.GPIO_Speed=GPIO_Speed_50MHz;
a.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA,&a); //初始化 /*配置PA10为浮空输入*/
a.GPIO_Pin=GPIO_Pin_10;
a.GPIO_Mode=GPIO_Mode_IN_FLOATING; //浮空输入
a.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&a); //第二步:NVIC配置
/*NVIC嵌套向量中断控制器*/
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //优先级配置
NVIC_InitTypeDef b;
b.NVIC_IRQChannel = USART1_IRQn;//USART1_IRQn串口中断
b.NVIC_IRQChannelPreemptionPriority = ;//0 1 2 3 4
b.NVIC_IRQChannelSubPriority = ;//0 1 2 3 4
b.NVIC_IRQChannelCmd = ENABLE; //使能
NVIC_Init(&b); //第三步:串口配置
USART_InitTypeDef c;
c.USART_BaudRate=; //波特率
c.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//硬件控制流
c.USART_Mode=USART_Mode_Rx|USART_Mode_Tx; //模式,此模式为发送和接受
c.USART_WordLength=USART_WordLength_8b;//字长8
c.USART_Parity=USART_Parity_No; //奇偶校验n
c.USART_StopBits=USART_StopBits_1; //停止位1
USART_Init(USART1,&c);
//第四步:串口时能
USART_Cmd(USART1,ENABLE);
} /*以下代码为printf能在发送数据给串口所用*/
int fputc(int ch,FILE* ffdsfa)
{
USART_SendData(USART1,ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);//等待发送完成
return ch;
}

新建.h文件(不同文件之间的函数调用必须掌握的知识点)

 #ifndef _USART1_H_
#define _USART1_H_ void usart1_config(); #endif

STM32串口usart发送数据的更多相关文章

  1. STM32的USART发送数据时如何使用TXE和TC标志

    在USART的发送端有2个寄存器,一个是程序可以看到的USART_DR寄存器,另一个是程序看不到的移位寄存器,对应USART数据发送有两个标志,一个是TXE=发送数据寄存器空,另一个是TC=发送结束. ...

  2. STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085和串口只发送数据不能接收数据问题

    STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085的问题讨论:http://www.rt-thr ...

  3. STM32 使用 printf 发送数据配置方法 -- 串口 UART, JTAG SWO, JLINK RTT

    STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) http://home.eeworld.com.cn/my/space-uid-338727-blogid-47 ...

  4. STM32串口USART的使用方法和程序

    通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换. USART利用分数波特率发生器提供宽范围的波特率选择,支持同步单向通信和半 ...

  5. stm32串口USART 硬件流控 --学习笔记

    流控的概念源于 RS232 这个标准,在 RS232 标准里面包含了串口.流控的定义.大家一定了解,RS232 中的"RS"是Recommend Standard 的缩写,即&qu ...

  6. C#串口通信发送数据

    1 发送数据 需要2个串口 http://www.openedv.com/thread-228847-1-1.html 下载源文件 File_Protocol_Test.rar

  7. STM32 串口USART DMA方式发送接收数据

    硬件:stm32f103cbt6 软件:STM32F10x_StdPeriph_Lib_V3.5.0 文章目录 头文件 USART3_DR的地址 DMA的通道 DMA的中断 USART接收回调函数 头 ...

  8. STM32串口DMA接收数据错位——暴力解决方法

    背景:两片STM32通过串口通信,为了减小CPU负担,采用DMA进行通信,发送端为STM32F103C8T6,接收端为STM32F407VET6.在调试的过程中发现,一直出现数据错位的问题,接收端尝试 ...

  9. 为何串口dma发送数据可能不完整

    串口dma数据发送不完整, 1. 通过打印log说明数据合成,送给dma buff都是正常的. 2. 数据通过硬件串口直接配置,是正常的 3. 数据通过单片机dma转发后数据异常,通过检查发现 dma ...

随机推荐

  1. selenium 操作复选框

    场景 从上一节的例子中可以看出,webdriver可以很方便的使用findElement方法来定位某个特定的对象,不过有时候我们却需要定位一组对象, 这时候就需要使用findElements方法. 定 ...

  2. ubuntu下如何编译C语言

    ubuntu下如何编译C语言     如果没有gcc编译器的话,使用以下命令获取 ~# sudo apt-get install gcc同时要下载辅助工具 ~# sudo apt-get instal ...

  3. javac选项以递归方式编译给定目录下的所有Java文件 - IT屋-程序员软件开发技术分享社区

    http://www.it1352.com/539276.html #Linux $ find -name“* .java”> sources.txt $ javac @ sources.txt ...

  4. js中类定义函数时用prototype与不用的区别

    转载自:https://blog.csdn.net/yexudengzhidao/article/details/72866047 先看例子 function ListCommon2(first,se ...

  5. order by 导出数据不一致的问题

    转自 http://blog.csdn.net/wwwwei_csdn/article/details/78181197 前言   数据库分页是后台经常要使用的技术手段,有时候进行数据库查询会根据业务 ...

  6. Python_shelve模块

    shelve:对象持久化的保存的模块,将对象保存到文件里  (默认的数据存储文件为二进制),可持久化任何pickle可支持的Python数据格式 shelve 中唯一的方法: shelve.open( ...

  7. Codeforces 295E Yaroslav and Points 线段树

    Yaroslav and Points 明明区间合并一下就好的东西, 为什么我会写得这么麻烦的方法啊啊啊. #include<bits/stdc++.h> #define LL long ...

  8. Openstack1 云计算与虚拟化概念

    一.云概念 二.虚拟化,云计算不等于虚拟化,但是云计算需要用到虚拟化的技术 1.服务器虚拟化 2.桌面虚拟化 3.应用虚拟化 三.区别 1.虚拟化是具体的技术. 2.云计算是交付使用的一种模式

  9. Fstring

    题目描述 一个只包含A,B,C三种字符的字符串,如果其中有连续的3个由A,B,C各一个组成,则称为Fstring. 例如:BAACAACCBAAA就是,而AABBCCAABB则不是. 你的任务就是计算 ...

  10. Clairewd’s message ekmp

    给两个串第一个串是翻译表(密文可以通过翻译表翻译成明文),第二个串是由密文+明文组成,前面是密文(完整的),后面是明文(未必完整),问能不能把第二个串补全,输出最短的一种可能. 一开始 用的strin ...