微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32串口通信测试程序

STM32串口通信测试程序

时间:11-28 来源:互联网 点击:
// 5个串口均可工作,已经把定时器中断、 串口中断和配置函数写在一个文件中 晶振 8Mhz

#include "stm32f10x_lib.h"

#include"stdio.h"

#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long

uint TimingDelay;

#define YES 1

#define NO 0

#define COM1_TX_EN GPIO_ResetBits(GPIOC,GPIO_Pin_1) // GPIOC->BSRR=0xfd //&=0xfd //USART1 发送使能

#define COM1_RX_EN GPIO_SetBits(GPIOC,GPIO_Pin_1) // GPIOC->BSRR=0x02 //|=0x02 //USART1 禁止发送

#define COM2_TX_EN GPIO_ResetBits(GPIOC,GPIO_Pin_2) // GPIOC->BSRR=0xfd //&=0xfd //USART2 发送使能

#define COM2_RX_EN GPIO_SetBits(GPIOC,GPIO_Pin_2)

#define COM3_TX_EN GPIO_ResetBits(GPIOC,GPIO_Pin_3) // GPIOC->BSRR=0xfd //&=0xfd //USART3 发送使能

#define COM3_RX_EN GPIO_SetBits(GPIOC,GPIO_Pin_3) // GPIOC->BSRR=0x02 //|=0x02 //USART3 禁止发送

#define COM4_TX_EN GPIO_ResetBits(GPIOC,GPIO_Pin_4) // GPIOC->BSRR=0xfd //&=0xfd //UART4 发送使能

#define COM4_RX_EN GPIO_SetBits(GPIOC,GPIO_Pin_4) // GPIOC->BSRR=0x02 //|=0x02 //UART4 禁止发送

//UART5 上行串口接收中断数据定义

uchar ComSynFlag; //=YES同步建立,UART0内部私有

uchar ComReceiveCounter; //接收字节计数,UART0内部私有

uchar ComReceiveData[24]; //接收缓冲,UART0内部私有

GPIO_InitTypeDef GPIO_InitStructure;

ErrorStatus HSEStartUpStatus;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

u16 Status; //定时器累加

void RCC_Configuration(void);

void GPIO_Configuration(void);

void NVIC_Configuration(void);

void TIM2_Configuration(void);

void UART5_Configuration(void);

void SysTick_Configuration(void) ;

void Com3TxChar(vu8);

vu16 CCR1_Val = 0x0E10; //360 50Hz 20ms

vu16 CCR2_Val = 0x0048; //7200 10hz 100ms

vu16 CCR3_Val = 0x7530; //30000 10Hz

vu16 CCR4_Val = 0x1000;

u16 capture1 = 0;

u16 capture2 = 0;

u16 capture3 = 0;

u16 capture4 = 0;

int cnt1,cnt2,nt2=50;

//UART1 下行串口接收中断数据定义

#define C1_LEN 300 //缓冲区长度

uint Com1RecCnt; //COM1接收字节计数

uchar Com1RecDat[C1_LEN]; //COM1接收缓冲

uchar Com1AnsDat[24];

uint Com1AnsCnt;

uint Com2RecCnt; //COM2接收字节计数

uchar Com2RecDat[C1_LEN]; //COM2接收缓冲

uchar Com2AnsDat[24];

uint Com2AnsCnt;

uint Com3RecCnt; //COM3接收字节计数

uchar Com3RecDat[C1_LEN]; //COM3接收缓冲

uchar Com3AnsDat[24];

uint Com3AnsCnt;

uint Com4RecCnt; //COM4接收字节计数

uchar Com4RecDat[C1_LEN]; //COM4接收缓冲

uchar Com4AnsDat[24];

uint Com4AnsCnt;

uint Time20msCnt; //20ms定时器

uint T20msCnt; //20ms定时器

uint T1sCnt; //1s定时器

uchar RunCnt; //RUN LED闪光频率参数

//=======================================================================

void RCC_Configuration()

{

ErrorStatus HSEStartUpStatus; //定义外部高速晶振启动状态枚举变量

RCC_DeInit(); //复位RCC外部寄存器到默认值

RCC_HSEConfig(RCC_HSE_ON); //打开外部高速晶振

HSEStartUpStatus=RCC_WaitForHSEStartUp(); //等待外部高速时钟准备好

if(HSEStartUpStatus==SUCCESS)

{ //外部高速时钟已经准备好

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //开启FLASH预读缓冲功能,加速FLASH的读取。所有程序中必须的用法,位置:RCC初始化子函数里面,时钟起振之后

FLASH_SetLatency(FLASH_Latency_2); //FLASH时序延迟几个周期,等待总线同步操作。推荐按照单片机系统运行频率,0—24MHz时,取Latency=0;24—48MHz时,取Latency=1;48~72MHz时,取Latency=2。

RCC_HCLKConfig(RCC_SYSCLK_Div1); //配置AHB(HCLK)==系统时钟/1

RCC_PCLK2Config(RCC_HCLK_Div1); //配置APB2(高速)(PCLK2)==系统时钟/1

RCC_PCLK1Config(RCC_HCLK_Div2); //配置APB1(低速)(PCLK1)==系统时钟/2

//注:AHB主要负责外部存储器时钟。APB2负责AD,I/O,高级TIM,串口1。APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM。

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //配置PLL时钟==(外部高速晶体时钟/1)* 9 ==72MHz

RCC_PLLCmd(ENABLE); //使能PLL时钟

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET); //等待PLL时钟就绪

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top