历史上的今天
今天是: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就绪
上一篇:STM32学习|点亮LED灯
下一篇:STM32的结构和启动模式
史海拾趣
|
今年老公一直打算是买一辆车,可是我们的手头也是实在不宽裕,汽车梦一直没有实现。 最近看到这样一条消息,陆风汽车厂家年底有优惠,风华上市一周年~~~ 哇~年底降价不用等了,本来陆风的性价比是很坚挺的的,一直都没怎么降价,我和老公也看 ...… 查看全部问答> |
|
一、办学优势 华中科技大学是教育部直属重点大学,在2003年全国高校排名中位居第五。师资力量,科研经费,科研成果等均位于全国高校前列,并具备多年丰富的工程硕士培养经验。 二、培养方向 电子与信息工程硕士的培养目标是面向国民经济信息 ...… 查看全部问答> |
|
资料介绍说明: OMNINET V6.07pcb转原理图软件,SN:omni785425 高速下载 带注册机Omninet607Crack.exe,注意破解才能用(如上图是破解器) 无需注册 OMNINET For Windows V607安装步聚: 字串8 第一步:运行Omninet_setup.exe 专业软件 ...… 查看全部问答> |
|
目录: 第一篇 电路理论基础 第一章 电路的基本概念和基本定律 第二章 电阻电路的分析方法 第三章 正弦交流电路 第四章 非正弦周期电流电路 第五章 电路暂态过程分析 第二篇 模拟电子技术基础 第六章 半导体分立器件 第七章 单管交流放大 ...… 查看全部问答> |




