这几天以来,一直是连续地学,舍不得花时间写东西了。现在学到助学例程13了,把其中重点的东西总结一下吧。
助学例程3:stm32定时器Tim3精确定时程序(外部高速晶振为8MHz,下同)-----重点是定时
/**********************************************************************
* 名 称:TIM3_Configuration()
* 功 能:定时器3配置
* 入口参数:
* 出口参数:
-----------------------------------------------------------------------
* 说明:定时1ms
***********************************************************************/
void TIM3_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Prescaler = 1; //2分频 16M
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数模式
TIM_TimeBaseStructure.TIM_Period = 16000; //自动装载,周期为1ms
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //使能中断源
TIM_Cmd(TIM3, ENABLE); //使能外设
}
助学例程4:stm32IO口输入程序-------重点是引脚电平读取
temp=GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2); //读取PA2 GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)此函数在stm32f10x_gpio.c里
助学例程6-STM32 USART1异步串口发送数据例程(查询方式)------重点是发送数据和检测结束标志
USART_SendData(USART1,(uint8)2); //发送数据
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){} ; //等待数据发送
助学例程7-USART1 串口接收程序(查询方式)-------接收数据函数的调用
if(USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET) // 等待接收数据
{
dat = USART_ReceiveData(USART1);
USART_SendData(USART1,(uint8)dat); //发送数据
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){} ; //等待数据发送
}
助学例程8-stm32 USART2 串口发送程序(查询方式)-----同例程6 助学例程9-stm32 USART1串口发送程序(中断方式)------同例程7
助学例程10-STM32 USART1 接收程序(中断方式)-------与例程7差不多,只是将while(1)里的循环体往串口中断处理程序移动了。
助学例程11- STM32 PWM实验------重要设置:自动重装载值,基波宽度,脉冲宽度。(在TIM1_Configuration)
/**********************************************************************
* 名 称:TIM1_Configuration()
* 功 能: 定时器1配置
* 接口参数:
* 全局变量:
-----------------------------------------------------------------------
* 说明:配置为PWM输出模式,输出引脚PA8,互补输出到PB13
***********************************************************************/
void TIM1_Configuration(void)
{
TIM1_TimeBaseInitTypeDef TIM1_TimeBaseStructure;
TIM1_OCInitTypeDef TIM1_OCInitStructure;
TIM1_DeInit();
TIM1_TimeBaseStructure.TIM1_Prescaler = 0x0; //时钟预分频得CK_INT时钟提供给计数器 APB2时钟/(n+1) n=1~65536
TIM1_TimeBaseStructure.TIM1_CounterMode = TIM1_CounterMode_Up; //向上计数模式
TIM1_TimeBaseStructure.TIM1_Period = 0xffff; //自动重装载值
TIM1_TimeBaseStructure.TIM1_ClockDivision = TIM1_CKD_DIV1; //时钟倍频因子,输出时钟供给死区发生器等
TIM1_TimeBaseStructure.TIM1_RepetitionCounter = 0x00; //周期计数器值 0~255
TIM1_TimeBaseInit(&TIM1_TimeBaseStructure); //初始化
TIM1_OCInitStructure.TIM1_OCMode = TIM1_OCMode_PWM2; //PWM2模式
TIM1_OCInitStructure.TIM1_OutputState = TIM1_OutputState_Enable; //信号输出到对应的输出引脚
TIM1_OCInitStructure.TIM1_OutputNState = TIM1_OutputNState_Enable; //互补信号输出到对应的输出引脚
TIM1_OCInitStructure.TIM1_Pulse = 0; //脉冲宽度
TIM1_OCInitStructure.TIM1_OCPolarity = TIM1_OCNPolarity_High; //互补输出高电平有效
TIM1_OCInitStructure.TIM1_OCNPolarity = TIM1_OCNPolarity_High; //互补输出高电平有效
TIM1_OCInitStructure.TIM1_OCIdleState = TIM1_OCIdleState_Set; //输出空闲状态为1
TIM1_OCInitStructure.TIM1_OCNIdleState = TIM1_OCIdleState_Reset; //互补输出空闲状态为0
TIM1_OC1Init(&TIM1_OCInitStructure); //OC1通道初始化
TIM1_Cmd(ENABLE); //使能定时器1
TIM1_CtrlPWMOutputs(ENABLE); //使能PWM输出
}
/**********************************************************************
* 名 称:PWMSet()
* 功 能: 设置PWM基波宽度,占空比
* 接口参数:base_wide 基波宽度
pulse_wide 脉冲宽度
* 全局变量:
-----------------------------------------------------------------------
* 说明:
***********************************************************************/
void PWMSet(uint16 base_wide,uint16 pulse_wide)
{
TIM1_SetAutoreload(base_wide);
TIM1_SetCompare1(pulse_wide);
} while(1) //循环体设置占空比不停地在变化
{
Delay(100); //延时
if (dat<0xfe0) dat=dat+20; //延时一定时间脉冲宽度+20
else dat=0;
PWMSet(0xfff,dat); //设置占空比
}
助学例程12-STM32进入停止模式并唤醒-----停止模式的进入以及中断唤醒
PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);//进入停止模式
助学例程13-STM32 Flash模拟EEPROM 存储数据例程------重点是过程:解锁->擦除->写半字->上锁
void SavePara(uint32 addr,uint16 data)
{
FLASH_Unlock(); //每次擦除Flash中数据时得先解锁
FLASH_ErasePage(ADDR_BASE); //擦除页
FLASH_ProgramHalfWord(addr,data);//写16位半字
FLASH_Lock(); //上锁
}
*****************************************************************************************************/
uint16 GetPara(uint32 addr)
{
uint16 data;
data=(uint16)(*(uint32*)addr); //读取相应地址中的16位数据
return data;
} // 读取是可以直接读出来的
都是固件库函数的运用,在这里只是理一下思路而已,免得以后去具体例程寻找思路。易记之!
用户377235 2014-4-6 10:00
用户267826 2011-8-14 13:55
xucun915_925777961 2011-4-29 01:00