你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

每日笔记1

[复制链接]
wrdt24435 发布时间:2018-8-7 21:33
doublen;   n=a/b/1000.0  //除1000不会得小数,1000.0才会有小数

voidT1Capture1_Init(void)      //定时器1捕获初始化
{
    TIM1_CCER1 &= 0xFE; //先禁止捕获
    TIM1_CCMR1 &= 0xFD;
    TIM1_CCMR1 |= 0x01; //第0-1位CC1S[1:0]置01,CC1通道被配置为输入,IC1映射在TI1FP1上;输入模式下第4-7位IC1F[3:0],置0000为无滤波
    // 在TIM1_CCER1寄存器中置CC1P(1)位设置捕获上升或下降沿(0上升沿,1下降沿)
    TIM1_CCMR1 |= 0x0C; // 输入模式下第2-3位置00-11来配置0-8分频(每n个事件触发捕获)
    TIM1_CCER1 |= 0x01; //输入模式下第0位CC1E置1使能捕获
    TIM1_IER |= 0x02;   //第1位CC1IE置1使能捕获中断
    TIM1_SR1 &= 0xFD;   //第二位CC1IF置0清除捕获/比较1中断标记
}
#pragmavector=0xE   //定时器1捕获中断
__interruptvoid TIM1_CAP_COM_IRQHandler(void)
{
    if(TIM1_SR1&0x02)   //判断是TIM1的中断
    {
        static u8 T1N=0;
        static u16T1Cap_value=0,T1Cap_value1=0,T1Cap_value2=0;
        if (T1N==0)
        {
            T1Cap_value1=TIM1_CCR1H;
           T1Cap_value1=(T1Cap_value1<<8)+TIM1_CCR1L;    //获取捕获值
            T1N=1;
        }
        else
        {
            T1Cap_value2=TIM1_CCR1H;
           T1Cap_value2=(T1Cap_value2<<8)+TIM1_CCR1L;
           T1Cap_value=T1Cap_value2-T1Cap_value1;
/*
                 if(T1Cap_value1 >T1Cap_value2)     //定时器溢出处理
                      T1Cap_value差值正常算;
                 else
                      T1Cap_value= 0xFFFF +T1Cap_value2 - T1Cap_value1;
*/
           f=16000000*8/T1Cap_value/1000.0;   //8分频了所以*8,除1000单位换成K
            TIM1_CNTRH = 0x00;//清零计数器高8位
            TIM1_CNTRL = 0x00;//清零计数器低8位
            T1N=0;
        }
    }
    TIM1_SR1 &= 0xFD;   //清除捕获比较1中断标志  
    TIM1_SR2 &= 0xFD;   //第二位CC1OF置0清除重复捕获标志      
}

void BEEP(void)     //蜂鸣器
{
    CLK_ICKR |= 0x08; //3LEISN1打开LSI(低速)
    while((CLK_ICKR & 0x10) == 0);  //LSI时钟准备好后第4LSIRDY被硬件置1
    BEEP_CSR = 0x0e;      //0-4BEEPDIV[4:0]0E选择16分频,第6-7BEEPSEL[1:0]00选择输出f(LSI)/ (8 x BEEPDIV) kHz128/8*16=1KHZ(输出频率越大声音越尖锐)
    BEEP_CSR |= 0x20;    //打开BEEP引脚(PD4,要在option byte更改默认输出模式)
    delay_ms(200);
BEEP_CSR &=0xDF;     //关
}

question:如 #pragma vector=0xE
__interrupt void TIM1_CAP_COM_IRQHandler(void)这个中断服务子函数如何找到,在芯片手册里只看到中断的地址,是像头文件这样在编译环境的头文件定义好了地址就可以直接用上述名称进入中断服务子函数,然后不同的编译软件就有不同的中断服务子函数入口。是这样吗?

点评

发错板块了吗  发表于 2018-9-30 13:46
问题发求助版块啊  发表于 2018-8-14 15:30
收藏 评论3 发布时间:2018-8-7 21:33

举报

3个回答
robter 回答时间:2018-9-20 21:59:43
很好的学习资料,感谢楼主的奉献

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版