附1:固件库函数

//初始化例程
STM32固件库代码V3.5版\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\ 下各模块文件查看
//函数所在文件
GPIO---stm32f10x.gpio.h
TIM---stm32f10x.tim.h  
RTC---stm32f10x_rtc.h    

LED部分:

GPIO\IOToggle\main.c

初始化部分: 58~64

RCC_APB2PeriphClockCmd	//启用或禁用高速APB(APB2)外设的时钟
GPIO_Init	//GPIO初始化,需要用到下面结构体
GPIO_SetBits	//设置指定的数据端口位(即高电平)    
GPIO_ResetBits	//清除指定的数据端口位(即低电平)       
//结构体(stm32f10x_gpio.h)
GPIO_InitTypeDef GPIO_InitStructure;
//成员
GPIO_Pin(管脚):GPIO_Pin_x(可以是16位的十六进制数/宏定义)

GPIO_Mode(模式8种):GPIO_Mode_Out_PP推挽输出,GPIO_Mode_Out_OD开漏输出,GPIO_Mode_AF_OD复用开漏输出,GPIO_Mode_AF_PP复用推挽输出,GPIO_Mode_IPU上拉输入,GPIO_Mode_IPD下拉输入,GPIO_Mode_IN_FLOATING浮空输入,GPIO_Mode_AIN模拟输入
    
GPIO_Speed(最高输出速率3种):GPIO_Speed_10/2/50MHz

蜂鸣器部分:

GPIO_PinRemapConfig	//改变指定管脚的映射

按键部分(TIM4):

TimeBase\main.c

TIM部分: 88~93行, 133, 136

TIM中断部分: 182~190

TIM_TimeBaseInit	//定时器初始化,需要用到下面结构体
NVIC_Init	//中断初始化,需要用到下面结构体 
TIM_ITConfig	//使能或者失能指定的TIM中断  
TIM_Cmd	//使能或者失能TIMx外设
void TIM4_IRQHandler(void)	//TIM4中断服务函数,名字固定了可在启动文件100行左右找(startup_stm32f10x_md.s)    
GPIO_ReadInputDataBit	//读取指定端口管脚的输入(返回值是u8类型,1或0!)
TIM_GetITStatus	//检查指定的TIM中断是否发生(返回SET表示发生,返回RESET表示未发生)    
TIM_ClearITPendingBit	//清除中断处理位    
//通用定时器部分结构体
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
//成员
TIM_ClockDivision(时钟分频因子):默认0即可(即不分频),这个起到滤波,一点点延时的作用,这个值不会影响PWM频率
    
TIM_CounterMode(计数模式):默认0即可(即向上计数)  
    
TIM_Period(自动重装载值/溢出值): 根据公式计算-- (arr+1)X(psc+1)/72MHz,一般选择 arr-1
    
TIM_Prescaler(预分频系数):定时器预分频器设置,时钟源经该预分频器才是定时器时钟,它设定 TIMx_PSC寄存器的值。可设置范围为 0 ~ 65535,实现 1 ~ 65536 分频 (分频系数越小越精准) 一般选择 psc-1
    
TIM_RepetitionCounter(高级定时器才有):这个参数,必须配置,不能默认,不然pwm更新中断的次数不确定,不想用配置为0即可    
    
//中断部分结构体
NVIC_InitTypeDef NVIC_InitStructure;
//成员
NVIC_IRQChannel(选择指定的中断通道):

NVIC_IRQChannelCmd(定义的IRQ通道被使能还是失能):参数是ENABLE/DISABLE
    
NVIC_IRQChannelPreemptionPriority(抢占优先级):值越小优先级越大

NVIC_IRQChannelSubPriority(响应优先级):值越小优先级越大    

USART部分

USART\Interrupt\main.c

USART部分: 103~126行, 173行(改一下管脚即可)

USART中断部分: 229~232行(没有响应优先级的,需要自己加)

USART中断服务函数:同目录下的 stm32f10x_it.c 198~210行(中断接收)

USART_Init	//USART初始化
USART_ITConfig	//使能或者失能指定的USART中断  
USART_Cmd	//使能USARTx
USART_GetITStatus	//检查指定的USART中断是否发生(返回SET表示发生,返回RESET表示未发生)    
USART_ClearITPendingBit	//清除中断处理位
USART_ReceiveData	//返回USARTx最近接收到的数据    
//USART结构体
USART_InitTypeDef USART_InitStructure;
//成员
USART_BaudRate(波特率):一般是9600	

USART_WordLength(数据位):8个一般

USART_StopBits(停止位):1个一般

USART_Parity(奇偶校验):一般无

USART_HardwareFlowControl(硬件流控制模式):一般是禁止

USART_Mode(模式):收发---USART_Mode_Rx | USART_Mode_Tx;

RTC部分

RTC\LSI_Calib\main.c

中断部分:160~164

RTC部分: 181~216行(最后两行不用,加另外两行即可)

中断服务函数:同目录下的 stm32f10x_it.c 151~161行(需要修改一下)

RTC_SetCounter(Time); //写入时间
RTC_WaitForLastTask(); //等待对RTC寄存器操作完成

PWR_BackupAccessCmd	//使能或者失能RTC和后备寄存器访问
BKP_DeInit	//复位BKP
RCC_LSICmd	//使能或者失能内部低速晶振(LSI)
RCC_GetFlagStatus	//检查指定的RCC标志位是否设置(返回SET表示已设,返回RESET表示未设) 
RCC_RTCCLKConfig	//设置RTC时钟(RTCCLK)
RCC_RTCCLKCmd	//使能或者失能RTC时钟
RTC_WaitForSynchro	//等待最近一次对RTC寄存器的写操作完成(跟下面有区别,区别是这个必须是在APB复位后的任何读操作之前必须调用这个函数) 与时钟同步 
RTC_WaitForLastTask	//等待最近一次对RTC寄存器的写操作完成  
RTC_ITConfig	//使能或者失能指定的RTC中断
RTC_SetPrescaler	//设置RTC预分频的值
RTC_SetCounter	//设置RTC计数器的值  
RTC_GetITStatus	//检查指定的RTC中断是否发生(返回SET表示发生,返回RESET表示未发生)     

ADC部分

ADC\ADC1_DMA\main.c

GPIO部分(管脚初始化): 140143行(改一下管脚跟IO组)

ADC部分: 40行,89~95`行(改一下通道号,周期)

DMA部分: 41行,

RCC_AHBPeriphClockCmd	//使能或者失能AHB外设时钟,一般是使能DMA,其他不怎么用
ADC_Init	//ADC初始化    
ADC_RegularChannelConfig	//设置指定ADC的规则组通道,设置它们的转化顺序和采样时间  
ADC_DMACmd	//开启ADC的DMA支持
ADC_Cmd	//开启ADC
ADC_ResetCalibration	//重置指定的ADC的校准寄存器
ADC_GetResetCalibrationStatus	//获取ADC重置校准寄存器的状态
ADC_StartCalibration	//开始指定ADC的校准状态
ADC_SoftwareStartConvCmd //获取指定ADC的校准程序    
//ADC部分结构体
ADC_InitTypeDef ADC_InitStructure;
//成员
ADC_Mode(独立/双ADC模式): 一般是独立模式
    
ADC_ScanConvMode(单通道/双通道):

ADC_ContinuousConvMode(连续/单次模式):

ADC_ExternalTrigConv(外部/软件触发):一般是软件控制转换
    
ADC_DataAlign(左对齐/右对齐):一般右对齐
    
ADC_NbrOfChannel(通道数目)  
  
    
//DMA部分结构体    
DMA_InitTypeDef DMA_InitStructure;
//成员
DMA_PeripheralBaseAddr(外设基地址):一般需要(u32)&

DMA_MemoryBaseAddr(DMA数据存储地址):用户自定义的,需要(u32)&变量名

DMA_DIR(外设作为数据来源还是目的地):一般选为数据来源

DMA_BufferSize(数据大小)

DMA_PeripheralInc(外设基地址是否地址)

DMA_MemoryInc(数据存储地址是否递增)

DMA_PeripheralDataSize(外设数据大小):有8,16,32位选择

DMA_MemoryDataSize(数据存储大小):同上

DMA_Mode(循环/非循环模式)

DMA_Priority(通道优先级)

DMA_M2M(是否内存-->内存)

PWM模式部分

TIM\PWM_Output\main.c

37~38行,90~95行, 98~105行,131行,134

TIM_OC2PreloadConfig	//使能或者失能TIMx在CCR2的预装载寄存器(数字对应通道号)
TIM_OC3PreloadConfig	//使能或者失能TIMx在CCR3的预装载寄存器(数字对应通道号)
TIM_ARRPreloadConfig	//使能或者失能TIMx在ARR上的预装载寄存器 
TIM_SetCompare2	//设置TIMx捕获比较2寄存器值(数字对应通道号)
TIM_SetCompare3 //设置TIMx捕获比较3寄存器值(数字对应通道号) 
//结构体
TIM_OCInitTypeDef  TIM_OCInitStructure;
//结构体成员(共8个,但是PWM模式只用到以下)
TIM_OCPolarity(极性):高电平/低电平
    
TIM_Pulse(CRR值):也就是比较值,可以设置0然后在main函数那用库设置CRR那些,也可以写 计数值X占空比
    
TIM_OutputState(输出使能): xxx_Enable即可
    
TIM_OCMode(6种模式):这里只需要PWM模式---PWM1,PWM2模式

PWM输出比较部分

TIM\PWM_OCToggle\main.c

37~40行(全局变量需要定义4个),89~92行,97~111行,130, 133行,196~203行(改一下中断优先级即可,初始化需要加3条清0操作如果双通道,单通道2条)(需要添加4条计算)

中断服务函数:同目录下的 stm32f10x_it.c 150~183行(只留下通道1和2的即可然后添加每个通道添加一个 if…else…)

TIM_SetCounter	//设置TIMx计数器寄存器值
TIM_ITConfig	//使能或者失能指定的TIM中断    
TIM_ClearITPendingBit	//清除TIMx的中断待处理位   
TIM_GetCapture1	//获得TIMx输入捕获1的值(数字对应通道号)  
//注意点:
//用到了4个结构体
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
//初始化需要清0步骤!

PWM捕获频率部分(一路适用于CH1/CH2)

TIM\PWM_Input\main.c

TIM_IC部分:76~97

NVIC部分:140~147行(修改中断优先级即可)

还有个TIM_TimeBaseStructure跟上面一样,arr设置65535,psc设置71即可

中断服务函数:同目录下的 stm32f10x_it.c 148~169行(频率计算公式改一下,占空比公式删了)

频率公式:Frequence = 1000000 / (float)(Fre_VAL + 1);

初始化不是 TIM_Init,而是 TIM_PWMIConfig

TIM_PWMIConfig	//PWM输入配置
TIM_SelectInputTrigger	//选择TIMx输入触发源    
TIM_SelectSlaveMode	//选择TIMx从模式 
TIM_SelectMasterSlaveMode	//设置或者重置TIMx主/从模式   
TIM_GetCapture2	//获得TIMx输入捕获2的值 
TIM_GetCapture1	//获得TIMx输入捕获1的值 
//结构体
TIM_ICInitTypeDef TIM_ICInitStructure;
//成员
TIM_Channel(通道):可以是1/2/3/4
    
TIM_ICPolarity(输入活动沿):参数可以是上升沿/下降沿
    
TIM_ICSelection(选择输入):有直连,非直连,TRC连接
    
TIM_ICPrescaler(设置输入捕获预分频器):一般不分频即0
    
TIM_ICFilter(选择输入比较滤波器):参数0x0~0xF,一般0x0

PWM捕获频率/占空比(适用全部通道)

TIM\InputCapture\main.c

75~87

113~120

130~137

还有个TIM_TimeBaseStructure跟上面一样,arr设置65535,psc设置71即可

中断服务函数:自己写

TIM_OC1PolarityConfig	//设置TIMx通道1极性(数字对应通道号)

PWM互补输出

TIM\ComplementarySignals\main.c

GPIO部分:196~199

TIMBase部分:106~110

TIM_OC部分:115~127

//结构体
TIM_OCInitTypeDef  TIM_OCInitStructure;
//结构体成员(共8个)
TIM_OCMode(PWM模式):PWM1/PWM2
    
TIM_OutputState(主通道输出使能)
    
TIM_OutputNState(互补通道使能)
    
TIM_Pulse(CRR值):可以设0,在主函数设置占空比
    
TIM_OCPolarity(主通道极性):hight/low
    
TIM_OCNPolarity(互补通道极性):hight/low
    
TIM_OCIdleState(空闲状态):SET--高电平/RESET--低电平
    
TIM_OCNIdleState(互补通道空闲状态):SET--高电平/RESET--低电平

滴答定时器延时

# define AHB_INPUT  72  //请按RCC中设置的AHB时钟频率填写到这里(单位MHz)

void delay_us(u32 us)//uS微秒级延时程序
{
	SysTick->LOAD=AHB_INPUT*us;//重装计数初值(当主频是72MHz,72次为1微秒)
	SysTick->VAL=0x00;//清空定时器的计数器
	SysTick->CTRL=0x00000005;//时钟源HCLK,打开定时器
	while(!(SysTick->CTRL&0x00010000));//等待计数到0
	SysTick->CTRL=0x00000004;//关闭定时器
}

void delay_ms(u32 ms)//mS毫秒级延时程序
{
	while(ms--!=0)
	{
		delay_us(1000);
	}
}

附2:函数参数类型与返回值解释

//参数类型
FunctionalState NewState(功能状态 新状态):ENABLE/DISABLE(使能/不使能)
    
u32 RCC_APB2Periph(指定APB2外设的时钟门):参数可以AD,I/O(GPIO),USART1,高级定时器TIM1/TIM8
    
u32 RCC_APB1Periph(指定APB1外设的时钟门):参数可以通用定时器TIM2/3/4,USART2/3,I2C1/2
    
GPIO_TypeDef* GPIOx(选择GPIO组):参数GPIOA~G
    
GPIO_InitTypeDef* GPIO_InitStruct(GPIO结构体指针):参数是结构体,要用& 
    
u16 GPIO_Pin(管脚):参数是管脚(可以是16位的十六进制数)   
    
u32 GPIO_Remap:选择重映射的管脚   
    
TIM_TypeDef* TIMx(选择TIMx外设):参数2/3/4

TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct(TIM结构体指针):参数是结构体,要用&
    
uint16_t TIM_IT(TIM中断源):参数如果是一般定时功能的话都是---TIM_IT_Update(TIM中断源)   ,如果用到PWM捕获/比较,则选CC1~CC4(数字对应通道号)
    
USART_TypeDef* USARTx(选择USARTx外设):参数1/2/3/4/5
    
uint16_t USART_IT(USART中断源):参数一般只用到接收/发送源,即---USART_IT_TXE(发送中断)/USART_IT_RXNE(接收中断)
    
USART_InitTypeDef* USART_InitStruct(USART结构体指针):参数是结构体,要用&    
    
uint32_t RCC_RTCCLKSource(设置RTC时钟):参数有LEI,LSE,HSE/128    
    
uint16_t RTC_IT(RTC中断源):参数有秒中断,闹钟中断,溢出中断

u32 CounterValue(计数值):   
    
u32 PrescalerValue(预分频值):LSI一般选40000或者40000-1   
    
uint8_t RCC_FLAG(待检查的RCC标志位): 

ADC_TypeDef* ADCx(选择ADCx外设):

ADC_InitTypeDef* ADC_InitStruct(ADC结构体指针):

uint8_t ADC_Channel(被设置的ADC通道)
  
uint8_t Rank(采用顺序):1~6
    
uint8_t ADC_SampleTime(通道的ADC采样时间)  :没有要求则一般是239.5周期  
    
//返回值类型  
ITStatus(中断状态):SET:1	RESET:0 
    
FlagStatus(设置状态):SET:1	RESET:0    
    
u16 TIM_InputTriggerSource(输入触发源):有8种,目前常用TI1FP1/TI2FP2    
    
u16 TIM_SlaveMode(TIM从模式):有4种,在本项目使用TIM_SlaveMode_Reset    
    
u16 TIM_MasterSlaveMode(定时器主从模式):Enable/Disable两种状态    
    
u16 Counter(计数器存储器新值):0~0xFFFF    
    
uint16_t TIM_OCPolarity(极性):hight/low(高/低电平) Falling/Rising(下降沿/上升沿)