for(j=0;j<8000;++j);
}
34.请编程实现键控蜂鸣器,当按键KEY1按下时,蜂鸣器发声,再按下不发声,按键采用中断方式控制。
*******************************************************/
/*说明:
KEY1->PA0;Buz->PB4
按键采用中断,在中断服务程中取反PB4
********************************************************/
#include"stm32f10x.h"
#include"system_stm32f10x.h"
#include"stm32f10x_gpio.h"
#include"stm32f10x_rcc.h"
#include"stm32f10x_exti.h"
#include"misc.h"
/*************************中断第二级配置*****************/
voidNVIC_Configuration(void)
{
NVIC_InitTypeDefNVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/***********************中断第三级配置******************/
voidEXTI_Configuration(void)
{
EXTI_InitTypeDefEXTI_InitStructure;
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);
EXTI_InitStructure.EXTI_Line=EXTI_Line0;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
/**********************按键初始化************************/
voidkey_init(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
/*********************蜂鸣器端口初始化******************/
voidBuzzer_Init(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);//PB4重映射
//Buzzer
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_ResetBits(GPIOB,GPIO_Pin_4);//置低电平,关闭蜂鸣器
}
intmain(void)
{
key_init();
Buzzer_Init();
__set_PRIMASK(0x00);//一级开关使能
NVIC_Configuration();//二级开关使能
EXTI_Configuration();//三级开关使能
/*************************************************/
while
(1){;}
}
/********************************************************/
voidEXTI0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0)!
=RESET)
{
GPIO_WriteBit(GPIOB,GPIO_Pin_4,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_4)));;
}
EXTI_ClearITPendingBit(EXTI_Line0);
}
第6章定时器结构及应用
35.STM32F103定时器是16位定时器。
36.STM32F103的基本定时器有:
TIM6、TIM7,通用定时器有:
TIM2~TIM5,高级定时器有:
TIM1、TIM8。
37.STM32F103定时器的主要功能有:
定时功能、输入捕获功能、输出比较功能(PWM)等。
38.已知系统时钟为72MHz,采用定时器TIM1产生周期为100ms的定时时间间隔并通过LED发光二极管指示定时过程,发光二极管与PC15相连。
分析:
TIM1的时钟为72MHz,定时100ms,需要计数7.2X106,已超出计数值范围,因此必须对输入时钟信号进行分频。
分频系数有多种选择,只要在计数范围内即可,只是计数值越大,分频率越高。
对输入时钟进行360分频,则计数值为2000,程序采用中断的方式,计时时间到LED状态反转。
/*****************************************************
说明:
已知系统时钟为72MHz,采用定时器TIM1产生周期为100ms
的定时时间间隔并通过LED发光二极管指示定时过程。
*****************************************************/
#include"stm32f10x.h"
#include"system_stm32f10x.h"
#include"stm32f10x_GPIO.h"
#include"stm32f10x_tim.h"
#include"stm32f10x_rcc.h"
#include"misc.h"
/*****************************************************
说明:
LED端口初始化PA15接LED.PD2控制锁存器
*****************************************************/
voidGPIO_Configuration(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_Write(GPIOC,0xFFFF);
/*************下面为74HC573锁存控制****************/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_Init(GPIOD,&GPIO_InitStructure);
//NLE置高,打开锁存器74HC573
GPIO_SetBits(GPIOD,GPIO_Pin_2);
}
voidTIM1_Configuration(void)
{
/*---------------------------------------------------------------
TIM1Configuration:
OutputCompareTimingMode:
TIM1CLK=72MHz,Prescaler=360,period=2000
---------------------------------------------------------------*/
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
TIM_TimeBaseStructure.TIM_Period=2000;//初值
TIM_TimeBaseStructure.TIM_Prescaler=360-1;//时钟预分频值
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_CounterMode=
TIM_CounterMode_Down;//计数方式
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);//使能中断(三级)
TIM_Cmd(TIM1,ENABLE);
}
voidNVIC_Configuration()//使能第二级中断开关
{
NVIC_InitTypeDefNVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel=TIM1_UP_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
intmain()
{
GPIO_Configuration();
NVIC_Configuration();
TIM1_Configuration();
while
(1)
;
}
第7章USART结构及应用
39.常见的短距离异步串行通信协议标准有:
RS232标准、RS485标准。
40.在异步串行通信中RS232标准的硬件连线主要有:
RX(数据接收线)、TX(数据发送)、GND(地线)组成。
41.STM32F103中的USART模块支持:
同步串行数据收和异步串行数据收发。
42.STM32F103中的USART模块支持:
全双工异步通信、同步单向通信和半双工单线通信。
43.STM32F103的USART模块程序初始化中主要涉及:
波特率、数据位、校验、停止位等设置。
44.STM32F103的USART模块的波特率最高可达:
4.5Mbit/s。
45.请利用STM32F103的USART模块实现与计算机之间通信,STM32F103发送:
"Pleaseinputdata!
:
"到计算机,计算机利用串口调试软件接收数据,然后计算机发送数据到STM32F103,并通过开发析上的LCD显示出接收的数据。
分析:
如图所示,采用串口2(USART2),用到PA2、PA3两个管脚,STM32F103的USART配置成波特率:
9600bit/s,数据位8位,停止位1位,校验位无。
数据接收采用中断方式进行。
/****************************************************
说明:
本程序是功能是STM32通过串口发:
"Pleaseinputdata!
:
"
对方通过串口发送数据,本STM32采用中断接收数据,保存在
RxBuffer[]
****************************************************/
#include"stm32f10x.h"
#include"system_stm32f10x.h"