×
单片机 > 单片机程序设计 > 详情

stm32的usart操纵超级终端(usart 操纵串口)

发布时间:2020-09-02 发布时间:
|

为了测试前面的无线模块的程序,写了一个usart操纵Windows超级终端的程序小程序。


废话少说,上代码:


 


1.硬件配置的头文件:


******************** (C) COPYRIGHT 2011 SDUEM ********************

* File Name          : hw_config.h

* Author             : wzb@sduem

* Version            : V2.2.0

* Date               : 05/13/2011

* Description        : Hardware Configuration & Setup

*******************************************************************************/

 

/* Define to prevent recursive inclusion -------------------------------------*/

#ifndef __HW_CONFIG_H

#define __HW_CONFIG_H

 

/* Includes ------------------------------------------------------------------*/

#include "stm32f10x_lib.h"

 

/* Exported types ------------------------------------------------------------*/

/* Exported constants --------------------------------------------------------*/

/* Exported variables --------------------------------------------------------*/

extern u32 TimingDelay;  // delay used!

/* Exported macro ------------------------------------------------------------*/

/* Exported define -----------------------------------------------------------*/

 

 

#if 0

//------------define the usart using-----------

#define USART_USING                  USART1

#define RCC_APB2Periph_USART_USING   RCC_APB2Periph_USART1

#define USART_USING_IRQChannel       USART1_IRQChannel

 

//--------------define USART pins-------------------

#define USART_RX_PIN     GPIO_Pin_10

#define USART_TX_PIN     GPIO_Pin_9

 

//------------define the SPI using-----------

#define SPI_USING                  SPI1

#define RCC_APB2Periph_SPI_USING   RCC_APB2Periph_SPI1

#define SPI_USING_IRQChannel       SPI1_IRQChannel

 

//--------------define SPI pins-------------------

#define SPI_SCK_PIN     GPIO_Pin_5

#define SPI_MISO_PIN    GPIO_Pin_6

#define SPI_MOSI_PIN    GPIO_Pin_7

 

//-------------------define the GPIO for USART_USING------------------

#define GPIO_FOR_USART    GPIOA

 

 

//-------------------define the GPIO for SPI_USING------------------

#define GPIO_FOR_SPI      GPIOA

 

#endif

 

 

/* Exported functions ------------------------------------------------------- */

void System_Init(void);

void RCC_Configuration(void); /*****与时钟相关的寄存器配制*****/

void USART_Configuration(void);

void SPI_Configuration(void);

 

//usart 送往超级终端上的字符显示

void usart_putc(u8 ch) ;

void usart_puts(u8  str[]) ;

void usart_println(void);

void usart_cls();

void usart_printArray( u8 * array, u32 arraySize) ;

void USART_EXTI_DoIt();   // Usart外部中断

 

void Decrement_TimingDelay(void);

void delay_us(u32 nCount);

 

/* External variables --------------------------------------------------------*/

 

#endif  /*__HW_CONFIG_H*/

 

/******************* (C) COPYRIGHT 2011 SDUEM *****END OF FILE****/

 



2. usart功能函数的代码实现:


 


/******************** (C) COPYRIGHT 2011 SDUEM ********************

* File Name          : hw_config.c

* Author             : wzb@SDUEM

* Version            : V2.2.0

* Date               : 05/13/2011

* Description        : Hardware Configuration & Setup

********************************************************************************

*

*******************************************************************************/

 

 

/* Includes ------------------------------------------------------------------*/

#include "hw_config.h"

 

/* Private typedef -----------------------------------------------------------*/

/* Private define ------------------------------------------------------------*/

/* Private macro -------------------------------------------------------------*/

/* Private variables ---------------------------------------------------------*/

 

 

/* Extern variables ----------------------------------------------------------*/

 

/* Exported variables ----------------------------------------------------------*/

u32 TimingDelay;

 

/* Private function prototypes -----------------------------------------------*/

static void SysTick_Configuration(void);

 

static void USART1_GPIO_Configuration();

static void USART1_NVIC_Configuration();

static void USART1_Configuration();

 

static void SPI1_GPIO_Configuration();

static void SPI1_NVIC_Configuration();

static void SPI1_Configuration();

 

 

/* ----------------------Exported functions ----------------------------------*/

 

 

/* ---------------RCC Configuration fuction -----------------------------------*/

/*******************************************************************************

* Function Name  : RCC_Configuration

* Description    : Configures the  system clocks

* Input          : None.

* Return         : None.

*******************************************************************************/

 

//RCC时钟配置 for the whole system

 void RCC_Configuration(void) {

       //定义错误状态变量

       ErrorStatus HSEStartUpStatus;

       //将RCC寄存器重新设置为默认值

       RCC_DeInit();

 

       //打开外部高速时钟晶振

       RCC_HSEConfig(RCC_HSE_ON);

 

       //等待外部高速时钟晶振工作

       HSEStartUpStatus = RCC_WaitForHSEStartUp();

 

       if(HSEStartUpStatus == SUCCESS) {

 

              //设置AHB时钟(HCLK)为系统时钟

              RCC_HCLKConfig(RCC_SYSCLK_Div1);

 

              //设置高速AHB时钟(APB2)为HCLK时钟

              RCC_PCLK2Config(RCC_HCLK_Div1);

 

              //设置低速AHB时钟(APB1)为HCLK的2分频

              RCC_PCLK1Config(RCC_HCLK_Div2);

 

              //设置FLASH代码延时

              FLASH_SetLatency(FLASH_Latency_2);

 

              //使能预取指缓存

              FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

 

              //设置PLL时钟,为HSE的9倍频 8MHz * 9 = 72MHz

              RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

              //使能PLL

              RCC_PLLCmd(ENABLE);

 

              //等待PLL准备就绪

              while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

              //设置PLL为系统时钟源

              RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

 

              //判断PLL是否是系统时钟

              while(RCC_GetSYSCLKSource() != 0x08);

       }

 

         //打开GPIOA AFIO USART1 SPI1 时钟,复用功能,串口1的时钟

         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA  | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1 | RCC_APB2Periph_SPI1, ENABLE);

 

}

 

/*******************************************************************************

* Function Name  : RCC_Configuration_1

* Description    : Configures the  system clocks

* Input          : None.

* Return         : None.

*******************************************************************************/

void RCC_Configuration_1(void)

{

      ErrorStatus HSEStartUpStatus;

      /* RCC system reset(for debug purpose) */

      RCC_DeInit();    //将RCC寄存器设备缺省值

 

      /* Enable HSE */

      RCC_HSEConfig(RCC_HSE_ON);  //外部高速振荡器HSE 开启

 

      /* Wait till HSE is ready */

      HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待HSE启动

 

      if (HSEStartUpStatus == SUCCESS)   //如果HSE晶振稳定且就绪

      {

          /* Enable Prefetch Buffer */

          FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);  //预取指缓存使能

          /* Flash 2 wait state */

          FLASH_SetLatency(FLASH_Latency_2); //设置FLASH存储器延时时钟周期数为2延时周期

          /* HCLK = SYSCLK */

          RCC_HCLKConfig(RCC_SYSCLK_Div1);  //设置AHB时钟=系统时钟

          /* PCLK2 = HCLK */

          RCC_PCLK2Config(RCC_HCLK_Div1); //设置APB2时钟 = HCLK

          /* PCLK1 = HCLK/2 */

          RCC_PCLK1Config(RCC_HCLK_Div2);    //设置APB1时钟 = HCLK/2

/* ADCC


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法