标题:
stm8单片机源程序如下:测速程序 含串口通信
[打印本页]
作者:
zyx136336399
时间:
2019-5-31 11:03
标题:
stm8单片机源程序如下:测速程序 含串口通信
基于stm8 光电门测速系统 能够与labview 和串口助手通信
单片机源程序如下:
#include "stm8s.h"
void GPIO_init_Config()
{
GPIO_DeInit(GPIOB);
GPIO_DeInit(GPIOA);
GPIO_DeInit(GPIOC);
GPIO_Init(GPIOB,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_HIGH_FAST);
GPIO_Init(GPIOA,GPIO_PIN_HNIB,GPIO_MODE_IN_PU_IT);
}
//延时函数,单位毫秒
void delay_ms(u16 i)
{
TIM2_DeInit();
TIM2_TimeBaseInit(TIM2_PRESCALER_2,999);
while(i--)
{
TIM2_Cmd(ENABLE);
while(TIM2_GetFlagStatus(TIM2_FLAG_UPDATE)!=1);
TIM2_ClearFlag(TIM2_FLAG_UPDATE);
TIM2_Cmd(DISABLE);
}
}
//TIM2初始化函数
void TIM3_Cap_Init()
{
TIM3_DeInit();
TIM3_TimeBaseInit(TIM3_PRESCALER_2,65535);
TIM3_ICInit(TIM3_CHANNEL_1,TIM3_ICPOLARITY_FALLING ,TIM3_ICSELECTION_DIRECTTI,TIM3_ICPSC_DIV1,0x00);
TIM3_ITConfig(TIM3_IT_CC1|TIM3_IT_UPDATE,ENABLE);
TIM3_CCxCmd(TIM3_CHANNEL_1,ENABLE);
enableInterrupts();
TIM3_Cmd(ENABLE);
}
//串口配置函数
void USART_Init()
{
UART2_DeInit();
UART2_Init((u32)9600,
UART2_WORDLENGTH_8D,
UART2_STOPBITS_1,
UART2_PARITY_NO,
UART2_SYNCMODE_CLOCK_DISABLE,
UART2_MODE_TXRX_ENABLE);
UART2_Cmd(ENABLE);
}
void USART_SendByte(u8 TxDate)
{
UART2_SendData8(TxDate);
while(!UART2_GetFlagStatus(UART2_FLAG_TXE));
}
void USART_Write(u8* TxDate,u16 len)
{
u16 i;
for(i=0;i<len;i++)
{
USART_SendByte(TxDate[i]);
}
}
u16 Cap_Val=0;
u8 Cap_Sta=0;
#pragma vector=18
__interrupt void TIMER_IRQHander(void)
{
if((Cap_Sta&0X80)==0)
{
#pragma vector=17
if (TIM3_GetITStatus(TIM3_IT_UPDATE)==SET)
{
if(Cap_Sta&0X40)
{
if((Cap_Sta&0X3F)==0X3F)
{
Cap_Sta|=0X80;
Cap_Val=0XFFFF;
}
else
{
Cap_Sta++;
}
}
TIM3_ClearITPendingBit(TIM3_IT_UPDATE);
}
if(TIM3_GetITStatus(TIM3_IT_CC1)==SET)
{
if(Cap_Sta&0X40)//捕获到一个上升沿
{
Cap_Sta|=0X80;//标记成功捕获到一次低电平脉宽
Cap_Val=TIM3_GetCapture1();
TIM3_OC1PolarityConfig(TIM3_ICPOLARITY_FALLING);//设置为下降沿触发
}
else//还未开始,第一次捕获下降沿
{
Cap_Sta=0;
Cap_Val=0;
TIM3_SetCounter(0);
Cap_Sta|=0X40;//标记捕获到了下降沿
TIM3_OC1PolarityConfig(TIM3_ICPOLARITY_RISING);//设置为上升沿触发
}
}
}
TIM3_ClearITPendingBit(TIM3_IT_CC1);
}
//主函数
int main(void)
{
u32 temp=0;
u8 s[10];
GPIO_init_Config();
TIM3_Cap_Init();
USART_Init();
GPIO_WriteHigh(GPIOB,GPIO_PIN_LNIB);
while(1)
{
if(Cap_Sta&0X80)
{
temp=Cap_Sta&0X3F;
temp*=65536;
temp+=Cap_Val;
Cap_Sta=0;
Cap_Val=0;
}
if(temp!=0)
{
GPIO_WriteReverse(GPIOB,GPIO_PIN_4);
//temp=0;
delay_ms(temp);
//GPIO_WriteReverse(GPIOB,GPIO_PIN_LNIB);
//delay_ms(temp/100000);
}
}
}
复制代码
所有资料51hei提供下载:
定时器捕获按键时长控制灯闪烁间隔.7z
(425.53 KB, 下载次数: 15)
2019-5-31 19:43 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2019-5-31 19:43
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1