历史上的今天
返回首页

历史上的今天

今天是:2024年09月11日(星期三)

正在发生

2019年09月11日 | stm32的usart操纵超级终端(usart 操纵串口)

2019-09-11 来源:eefocus

为了测试前面的无线模块的程序,写了一个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

          /* ADCCLK = PCLK2/6 */

          RCC_ADCCLKConfig(RCC_PCLK2_Div6); //设置ADC时钟=PCLK/6

 

          //PLL设置

          //PLL输入时钟=HSE时钟频率   输出 9倍频(HSE×9)

          RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);     //72M

          /* Enable PLL */

          RCC_PLLCmd(ENABLE);

 

          /* Wait till PLL is ready */

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

推荐阅读

史海拾趣

General Instrument公司的发展小趣事
导致电路中出现瞬间过高或过低的电压。
百事通科技(BUDDIES)公司的发展小趣事

百事通科技(BUDDIES)自创立之初,便致力于电子技术的研发与创新。在激烈的市场竞争中,公司意识到只有掌握核心技术,才能在行业中立足。于是,公司投入大量资源,组建了一支由业内顶尖专家组成的研发团队,专注于新型电子产品的研发。经过数年的努力,公司成功推出了一款具有自主知识产权的智能芯片,该芯片在性能上超越了同类产品,受到了市场的广泛认可。

Bellnix Co Ltd公司的发展小趣事

随着产品线的不断丰富,Bellnix开始积极拓展市场。公司通过与各大电子厂商建立合作关系,将产品应用于手机、电脑、家电等多个领域。同时,Bellnix还加强品牌建设,通过参加国际电子展会、举办技术研讨会等方式,提升品牌知名度和影响力。这些举措有效地推动了公司的市场拓展,为公司的持续发展奠定了坚实基础。

Dell公司的发展小趣事

随着国内市场的逐渐饱和,Bellnix开始将目光投向海外市场。公司制定了国际化战略,通过设立海外分公司、建立销售网络等方式,积极拓展海外市场。同时,Bellnix还加强与国际同行的交流与合作,引进先进的技术和管理经验,提升公司的国际化水平。这些举措使Bellnix在国际市场上取得了显著成绩,为公司的发展注入了新的动力。

东晨(DC)公司的发展小趣事

东晨(DC)公司注重企业文化的建设,将“创新、务实、协作、共赢”作为企业的核心价值观。公司倡导员工勇于创新、敢于挑战的精神,同时注重团队协作和共赢的理念。这种企业文化不仅增强了员工的凝聚力和向心力,也塑造了公司的良好品牌形象。在业界和客户中,东晨(DC)公司赢得了广泛的赞誉和信任。

请注意,以上故事为虚构内容,旨在展示电子行业公司可能的发展路径和成功要素。如有需要,请结合实际情况进行调整和完善。

帝特(DTECH)公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,帝特始终坚持创新驱动的发展战略。公司不断投入研发资源,加强技术创新和产品升级,力求在保持传统业务优势的同时,开拓新的增长点。此外,帝特还积极布局电子专用材料项目,加强半导体芯片封装浆料研发推广,进一步优化产业结构,提升公司的综合竞争力。

以上五个故事概述了帝特(DTECH)公司在电子行业发展的主要历程和关键节点,展现了公司从创立到成长为行业领军企业的艰辛与辉煌。

问答坊 | AI 解惑

礼物最重要的是实用!

今年老公一直打算是买一辆车,可是我们的手头也是实在不宽裕,汽车梦一直没有实现。 最近看到这样一条消息,陆风汽车厂家年底有优惠,风华上市一周年~~~ 哇~年底降价不用等了,本来陆风的性价比是很坚挺的的,一直都没怎么降价,我和老公也看 ...…

查看全部问答>

CPLD 和MCU开发板原理图

CPLD 和MCU开发板原理图…

查看全部问答>

07西电校选题

本帖最后由 paulhyde 于 2014-9-15 09:07 编辑 来自2007年西安电子科技大学 就一个题目:数字化低频信号测量、存储与回放系统 有评分标准 [ 本帖最后由 chbaaic 于 2009-5-29 08:10 编辑 ]  …

查看全部问答>

2009年华中科技大学电子与通信领域工程硕士

一、办学优势 华中科技大学是教育部直属重点大学,在2003年全国高校排名中位居第五。师资力量,科研经费,科研成果等均位于全国高校前列,并具备多年丰富的工程硕士培养经验。 二、培养方向 电子与信息工程硕士的培养目标是面向国民经济信息 ...…

查看全部问答>

我的电容器与开关电源的讲义

分享给大家,希望更多的工程师不仅仅是下载资料,简单解读,遇到问题希望大家能够提出,多多交流 …

查看全部问答>

OMNINET For Windows

资料介绍说明: OMNINET V6.07pcb转原理图软件,SN:omni785425 高速下载 带注册机Omninet607Crack.exe,注意破解才能用(如上图是破解器) 无需注册 OMNINET For Windows V607安装步聚: 字串8 第一步:运行Omninet_setup.exe 专业软件 ...…

查看全部问答>

【藏书阁】电路与模拟电子技术

目录: 第一篇 电路理论基础 第一章 电路的基本概念和基本定律 第二章 电阻电路的分析方法 第三章 正弦交流电路 第四章 非正弦周期电流电路 第五章 电路暂态过程分析 第二篇 模拟电子技术基础 第六章 半导体分立器件 第七章 单管交流放大 ...…

查看全部问答>

单片机C语言中断

大家好请问用C语言怎么写中断啊?具体问题是: 1、中断函数的格式是什么啊? 2、怎么实现多中断啊? 3、写中断应该注意什么问题啊? 以上以51或PIC单片机为例!最好是PIC的!谢谢!…

查看全部问答>

对于16kb的cache,合适的块大小一般是多少

对于16kb的cache,合适的块大小一般是多少?怎么得出结论的呢?…

查看全部问答>