代码实现

功能实现:与上位机进行通信

宏定义需要的GPIO

//头文件中的引脚 宏定义

// 串口1-USART1

#ifndef _USART_H

#define _USART_H

#include "stm32f10x.h"

#include "stdio.h"

// 串口1-USART1

#define USART1_TX USART1

#define USART1_TX_CLK RCC_APB2Periph_USART1

#define USART1_TX_APBxClkCmd RCC_APB2PeriphClockCmd

#define USART1_TX_BAUDRATE 115200

// USART GPIO 引脚宏定义

#define USART1_GPIO_CLK (RCC_APB2Periph_GPIOA)

#define USART1_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd

#define USART1_TX_GPIO_PORT GPIOA

#define USART1_TX_GPIO_PIN GPIO_Pin_9

#define USART1_RX_GPIO_PORT GPIOA

#define USART1_RX_GPIO_PIN GPIO_Pin_10

#define USART1_IRQ USART1_IRQn

#define USART1_IRQHandler USART1_IRQHandler

void USART_Config(void);

void Usart_SendByte(USART_TypeDef *TX, uint8_t data);

void Usart_Two_SendByte(USART_TypeDef *TX_usart, uint16_t data);

void Usart_SendArray(USART_TypeDef *TX_usart, uint8_t *array, uint8_t num);

void Usart_SendStr(USART_TypeDef *TX_usart, uint8_t *str);

#endif

串口初始化配置

//这里只在这个函数使用 可用static限制一下

//中断分组配置函数

static void NVIC_Configuration(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

/* 嵌套向量中断控制器组选择 */

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

/* 配置USART为中断源 */

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQ;

/* 抢断优先级*/

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

/* 子优先级 */

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

/* 使能中断 */

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

/* 初始化配置NVIC */

NVIC_Init(&NVIC_InitStructure);

}

//串口初始化函数

void USART_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

// 打开串口GPIO的时钟

//DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);

RCC_APB2PeriphClockCmd(USART1_GPIO_CLK, ENABLE);

// 打开串口外设的时钟

//DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);

RCC_APB2PeriphClockCmd(USART1_TX_CLK, ENABLE);

//将USART TX的GPIO配置为推挽复用模式

GPIO_InitStructure.GPIO_Pin = USART1_TX_GPIO_PIN;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(USART1_TX_GPIO_PORT,&GPIO_InitStructure);

//将USART RX的GPIO配置为浮空输入模式

GPIO_InitStructure.GPIO_Pin = USART1_RX_GPIO_PIN;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(USART1_RX_GPIO_PORT, &GPIO_InitStructure);

//配置串口的工作参数

//波特率

USART_InitStructure.USART_BaudRate = USART1_TX_BAUDRATE;

// 配置 针数据字长

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

// 配置停止位

USART_InitStructure.USART_StopBits = USART_StopBits_1;

// 配置校验位

USART_InitStructure.USART_Parity = USART_Parity_No ;

// 配置硬件流控制

USART_InitStructure.USART_HardwareFlowControl =

USART_HardwareFlowControl_None;

// 配置工作模式,收发一起

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

// 完成串口的初始化配置

USART_Init(USART1_TX, &USART_InitStructure);

// 串口中断优先级配置

NVIC_Configuration();

// 使能串口接收中断

USART_ITConfig(USART1_TX, USART_IT_RXNE, ENABLE);

// 使能串口

USART_Cmd(USART1_TX, ENABLE);

}

给上位机发送数据

提示:下面这些函数 都在usart.c中哦(⊙o⊙)

发送一个字节

void Usart_SendByte(USART_TypeDef *TX_usart, uint8_t data)

{

USART_SendData(TX_usart,data);

//检测串口发送的数据

//若没有数据来 就会一直等待

while(USART_GetFlagStatus(TX_usart,USART_FLAG_TXE) == RESET);

发送两个字节

void Usart_Two_SendByte(USART_TypeDef *TX_usart, uint16_t data)

{

uint8_t temp_h,temp_l;

temp_h = (data&0xff00) >> 8;

temp_l = data&0xff;

//发送高八位

USART_SendData(TX_usart,temp_h);

while(USART_GetFlagStatus(TX_usart,USART_FLAG_TXE) == RESET);

//发送低八位

USART_SendData(TX_usart,temp_l);

while(USART_GetFlagStatus(TX_usart,USART_FLAG_TXE) == RESET);

}

发送八位数组

void Usart_SendArray(USART_TypeDef *TX_usart, uint8_t *array, uint8_t num)

{

uint8_t i;

for(i=0; i

{

Usart_SendByte(TX_usart,array[i]);

}

while(USART_GetFlagStatus(TX_usart,USART_FLAG_TC) == RESET);

}

发送字符串

void Usart_SendStr(USART_TypeDef *TX_usart, uint8_t *str)

{

uint8_t i = 0;

do

{

Usart_SendByte(TX_usart,str[i]);

i++;

}while(str[i] != '\0');

while(USART_GetFlagStatus(TX_usart,USART_FLAG_TC) == RESET);

}

注意:要勾选keil中的 ues MicroLIB选项

重定向c库函数调用

int fputc(int ch, FILE *f)

{

/* 发送一个字节数据到串口 */

USART_SendData(USART1_TX, (uint8_t) ch);

/* 等待发送完毕 */

while (USART_GetFlagStatus(USART1_TX, USART_FLAG_TXE) == RESET);

return (ch);

}

//重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数

int fgetc(FILE *f)

{

/* 等待串口输入数据 */

while (USART_GetFlagStatus(USART1_TX, USART_FLAG_RXNE) == RESET);

return (int)USART_ReceiveData(USART1_TX);

}

主程序测试

#include "stm32f10x.h"

#include "usart.h"

int main(void)

{

uint8_t array[] = {0x00,0x01,0x03,0x04,0x05};

//串口初始化

USART_Config();

//发送一个字节

Usart_SendByte(DEBUG_USARTx,100);

//发送两个字节

Usart_Two_SendByte(DEBUG_USARTx , 0xff00);

//发送一个八位字节

Usart_SendArray(DEBUG_USARTx,array,5);

//发送字符串

Usart_SendStr(USART1_TX,"陈一一哇龘\n");

printf("陈一一哇\n\n\n\n");

while(1)

{

}

}

stm32串口c语言程序,STM32串口通信-代码实现相关推荐

  1. hx711c语言程序,STM32写的HX711程序

    查看: 35712|回复: 60 STM32写的HX711程序 当前离线积分 初级会员, 积分 73, 距离下一级还需 127 积分 积分金钱73 注册时间2014-8-20 在线时间0 小时 电梯直 ...

  2. 多路采集存储c语言程序,stm32多路巡回数据采集系统设计 含源程序

    此次设计是利用stm32开发板设计的.数据采集系统是模拟域与数字域之间必不可少的纽带,它的存在具有着非常重要的作用.本文介绍的重点是数据采集系统,而该系统硬件部分的重心在于单片机芯片.数据采集与通信控 ...

  3. 串口同步异步c语言程序,同步串口spi的c语言编程

    原标题:同步串口spi的c语言编程 #include #include #define uchar unsigned char #define uint unsigned int uchar Tabl ...

  4. stm32流水灯c语言程序,STM32——流水灯程序

    STM32--流水灯 stm32f10x_conf.h:打开stm32f10x_gpio.h和stm32f10x_rcc.h: stm32f10x_gpio.c 和 stm32f10x_rcc.c加入 ...

  5. stm32呼吸灯c语言程序,STM32使用PWM控制LED呼吸灯效果

    实验的STM32型号: STM32F103C8T6   48引脚 涉及到的知识: RCC,GPIO,TIMER,PWM 设置 *RCC需打开外部时钟 *GPIO查表得知 PA3 默认复用引脚 TIM2 ...

  6. stm32流水灯c语言程序,stm32流水灯程序源码

    #include "STM32f10x.h" #include #include "delay.h" /**************************** ...

  7. max6675 c语言程序,STM32+MAX6675利用SPI获取实时温度数据程序及代码

    标签: 本文采用的芯片为STM32F103RCT6 温度芯片为MAX6675 模拟spi之前写过 里面的部分代码摘取的正点原子的函数库:sys.uart.delay等文件 原理图 max6675.h ...

  8. c32循迹小车c语言程序,STM32小车红外黑线循迹源程序

    /********************************* 深圳市航太电子 ******************************* * 实 验 名 :小车红外黑线循迹 * 实验说明 ...

  9. c32循迹小车c语言程序,stm32篇--小车循迹

    小车的循迹算法 循迹小车使用红外对射寻黑线,根据轨道的不同,我使用了两种不同算法: (1)第一种是在轨道外有影响的,比如轨道外有黑色,车出去一点就会碰到黑色,那就是检测到歪了之后除非检测它 回来了,否 ...

  10. t12电烙铁c语言程序,可跑C代码的串口屏之T12白光烙铁

    T12 白光烙铁也是电子DIY中一个非常经典的项目,以至于T12白光DIY烙铁也是广大爱好者和专业人员的标配工具:T12的整个电路可以说是一个标准的温控系统,因此把代码稍微改制,就可以实现各种温控器的 ...

最新文章

  1. 论坛报名 | 语音与自然语言处理的最新突破和前沿趋势
  2. php设计模式八-----装饰器模式
  3. 协程概念,原理(c++和node.js实现)
  4. R语言XML格式数据导入与处理
  5. 深度学习pytorch--多层感知机(三)
  6. project 2013 显示标题
  7. 进制转换c语言代码_奇怪的C语言代码,有些函数在变量前加上(void)是什么类型转换?...
  8. noi 3531 判断整除
  9. java同步方法必须是静态的吗_Java基础知识之synchronized同步方法、代码块、静态方法、静态代码块的区别...
  10. 数据库工作笔记002---Linux下开启,重启,关闭mysql
  11. 常用的MySQL命令大全
  12. 浅谈算法和数据结构: 四 快速排序
  13. for循环 批处理 查找文件 详细信息 文件名
  14. rssi参数获取_如何获取WlanGetNetworkBssList函数返回值的Rssi值
  15. 论文引用文献并插入编号
  16. 百家讲坛-郦波评说曾国藩家训
  17. 华为路由器 单臂路由
  18. 程序员陪女朋友自拍杆哪个好?自拍杆品牌推荐
  19. 网易云音乐linux安装路径,修复网易云音乐Linux版不能安装及运行的问题
  20. android源码下载(下)

热门文章

  1. mysql utf8 bom_UTF8的BOM
  2. 如何正确设置同时使用内外网
  3. vue插件大全汇总,你要的都这里,赶紧收藏下!
  4. CSS font-family 各字体一览表
  5. JS导出excel 纯前端
  6. unity文字特殊效果
  7. jeesite实战(三十六)——非status的其他属性In条件查询
  8. Adobe国际认证|发布 Adob​e Photoshop全部教程
  9. atmega168p与328p_atmega328P 写入 Boot Loader的那点事
  10. 禁忌搜索算法代码注释