cc2541 计算霍尔-频率
发布日期:2021-06-29 05:35:27 浏览次数:3 分类:技术文章

本文共 2043 字,大约阅读时间需要 6 分钟。

1、平台条件

1:硬件cc2541

2 通过霍尔传感器计算频率

利用外部io中断的,计算霍尔脚踏板的频率

主要思想:
1:一个边沿进来,就清除定时器的值并开始计数,:
2:下一个边沿进来,就读定时器的计数,并清除,再重新开始计数。
3:读出来的值就是周期。然后计算频率

2.1 外部中断引脚的设置

void hal_io_Init(void)    {
P2SEL &= ~(1 << 0); //P2.0设置为IO口 P2DIR &= ~(1 << 0); //P2.0设置为输入 P2INP &= ~(1 << 0); //P2.0上拉下拉模式 P2INP &= ~(1 << 7); //P2上拉 P2_0 = 1; //P2.0拉高 P2IFG &= ~(1 << 0); //初始化P2.0中断标志位 PICTL |= (1 << 3); //下降沿触发 P2IEN |= (1 << 0); //使能P2.0中断 IEN2 |= (1 << 1); //允许P口中断; }
static uint32  P20_timer_cac = 0; // 定时器计数----、、、static uint8   is_stop_P20_timer_fla = 1;// 1:表示停止   ,0表示正在开始定时器//static uint8 P20_isr_times = 0;// 中断次数uint8 frue_aa =0;#pragma vector = P2INT_VECTOR        __interrupt void P2_ISR(void)     {
//p2.0 拉低------- if(!(P2 & (1 << 0)) ) {
// 1: 计算频率-------- if(P20_timer_cac) {
montor_dat.frequency = 1000/P20_timer_cac; } // step 2:重新清0, P20_timer_cac =0; // step 3: 定时器是否停止过, if(is_stop_P20_timer_fla==1) {
is_stop_P20_timer_fla =0; //开始定时器循环 osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_HAL_CYCLE, TIME_PORI ); } if(motor_turn_sta!=2) {
montor_dat.Turn_dir =1; // 正传 motor_turn_sta =1; } set_devie_on_sta (); } P2IFG = 0; //清中断标志 P2IF = 0; //清中断标志 P2IFG = 0; //清中断标志 P2IF = 0; //清中断标志 }/************************************************ ------- 计算频率--------*******************************************/void calcu_frequency_handle(void){
// 累加定时器变量 P20_timer_cac+=TIME_PORI; // 2s //// if(P20_timer_cac>(2000/50))// { // montor_dat.frequency = 0; // is_stop_P20_timer_fla =1; // osal_stop_timerEx( simpleBLEPeripheral_TaskID, SBP_HAL_CYCLE);// }}

可以加入QQ群:687360507

与大伙沟通交流,技术在于分享而进步

转载地址:https://blog.csdn.net/zhi_Alanwu/article/details/104031379 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:ble原理(2)蓝牙5.0文档概述
下一篇:算法(1)FFT 傅里叶变化算法 c语言

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月14日 21时09分25秒