STM32在运行时读取java定时器时间设置CNT值的问题

1032人阅读
单片机(81)
输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32 的定时器,除了 TIM6 和 TIM7,其他定时器都有输入捕获功能。以下是对脉冲宽度及频率的计算。
1、脉冲宽度
如下图所示,采集该高电平脉冲的宽度,只需要进入输入捕获上升沿检测,记录当前的发生上升沿时的CNT值,再进行输入捕获下降沿检测,也记录当前发生下降沿时的CNT值,两次CNT值的差值再根据计数的频率就可以算出脉冲的宽度。
上升沿及下降沿捕获的程序具体实现如下:
TIM8_Cap_Init(0XFFFF,72-1);
//以1Mhz的频率计数
void TIM8_UP_IRQHandler(void)
if((TIM8CH4_CAPTURE_STA&0X80)==0)
//还未成功捕获
if (TIM_GetITStatus(TIM8,TIM_IT_Update) != RESET)
if(TIM8CH4_CAPTURE_STA&0X40)
//已经捕获到高电平了
if((TIM8CH4_CAPTURE_STA&0X3F)==0X3F) //高电平太长了
TIM8CH4_CAPTURE_STA|=0X80;
//标记成功捕获了一次
TIM8CH4_CAPTURE_VAL=0XFFFF;
TIM8CH4_CAPTURE_STA++;
//捕获高电平后定时器溢出的次数++
TIM_ClearITPendingBit(TIM8,TIM_IT_Update);
//清除中断标志位
void TIM8_CC_IRQHandler(void)
if((TIM8CH4_CAPTURE_STA&0X80)==0)
if(TIM_GetITStatus(TIM8,TIM_IT_CC4) != RESET)
//捕获1发生捕获事件
if(TIM8CH4_CAPTURE_STA&0X40)
//捕获到一个下降沿
TIM8CH4_CAPTURE_STA|=0X80;//标记成功捕获到一次高电平脉宽
TIM8CH4_CAPTURE_VAL=TIM_GetCapture4(TIM8);
TIM_OC4PolarityConfig(TIM8,TIM_ICPolarity_Rising); //CC1P=0 设置为上升沿捕获
//还未开始,第一次捕获上升沿
TIM8CH4_CAPTURE_STA=0;
TIM8CH4_CAPTURE_VAL=0;
TIM_SetCounter(TIM8,0);
//计数器清零
TIM8CH4_CAPTURE_STA|=0X40;//标记捕获到了上升沿
TIM_OC4PolarityConfig(TIM8,TIM_ICPolarity_Falling);//CC1P=1 设置为下降沿捕获
TIM_ClearITPendingBit(TIM8, TIM_IT_CC4);
//清除中断标志位
程序中定时器输入捕获配置的TIM8CH4通道,CNT计数的频率1MHZ,即计数1个就是1us。TIM8_UP_IRQHandler是一个定时中断函数,根据TIM8_Cap_Init(0XFFFF,72-1)可知65536us会中断一次,所以总的脉冲宽度时间如下:
temp=TIM8CH4_CAPTURE_STA&0X3F;
temp*=65536;
temp+=TIM8CH4_CAPTURE_VAL;
2、频率测量
如下图所示,测量脉冲的频率,则分别采集两次输入捕获上升沿的CNT值,脉冲的频率=f/△CNT
两次上升沿捕获的程序具体实现如下:
TIM8_Cap_Init(0XFFFF,72-1);
//以1Mhz的频率计数
void TIM8_CC_IRQHandler(void)
if(TIM_GetITStatus(TIM8,TIM_IT_CC4)!=RESET)
TIM_ClearITPendingBit(TIM8, TIM_IT_CC4);
//清除中断标志位
if(state==0)
//捕获第一个上升沿
timecount=TIM_GetCapture4(TIM8);
//记录第一次上升沿的CNT值
else if(state==1)//捕获第二个上升沿
timecount1=TIM_GetCapture4(TIM8);
//记录第二次上升沿的CNT值
if(timecount&timecount1)
test=timecount1-
//两次上升沿的差值
else if(timecount&timecount1)
test=(0xffff-timecount)+timecount1;
//两次上升沿的差值
fq=1000000/
//脉冲的频率
由程序可知配置的定时器的输入捕获的计数的频率为1MHZ,两次捕获上升沿的差值test为计数器CNT计的次数,所以总的周期即为T=1us*test,所以频率就fq=1000000/test HZ;
另外,测量频率除了还可以使用定时器的外部脉冲信号计数来进行。
3、定时器的外部计数模式测频率
因为STM32有外部时钟源模式,即可以根据外部脉冲信号进行计数,然后另外设定定时器定时中断去读取计数器的值,频率=CNT/定时中断时间。程序代码实现如下:
TIM3_Int_Init();
//定时1s中断一次
TIM2_Cap_Init();
//外部信号引脚脉冲检测 TIM2_CH1_ETR
void TIM2_Cap_Init(void)
//配置 TIM2_CH1_ETR 为外部脉冲计数
GPIO_InitTypeDef GPIO_InitS
TIM_TimeBaseInitTypeDef
TIM_TimeBaseS
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
//使能TIM2时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//使能GPIOA时钟
GPIO_InitStructure.GPIO_Pin
= GPIO_Pin_0;
//PA0 清除之前设置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
//PA0 输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
//PA0 下拉
//初始化定时器2 TIM2
TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
//设定计数器自动重装值
TIM_TimeBaseStructure.TIM_Prescaler =0;
//预分频器
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
//TIM向上计数模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
//根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
TIM_ITRxExternalClockConfig(TIM2,TIM_TS_ETRF);
//配置外部触发,否则不会计数
TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
TIM_SetCounter(TIM2, 0);
TIM_Cmd(TIM2,ENABLE );
//使能定时器2
/*******************************************************************************
* 名称: TIM3_IRQHandler
* 功能: 通用定时器3中断服务函数
* 形参: 无
* 返回: 无
* 说明: 1S定时中断一次
******************************************************************************/
void TIM3_IRQHandler(void)
if(TIM_GetITStatus(TIM3,TIM_IT_Update)!= RESET)
//检查TIM3更新中断发生与否
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
//清除TIMx更新中断标志
CNT=TIM_GetCounter(TIM2);
//读取1s内计数器计的CNT值
//脉冲的频率
TIM_SetCounter(TIM2,0);
因为知道定时中断时间为1s,所以测量的频率fq=CNT/1(HZ),频率的计算及脉冲宽度的测量有以上方法测试。
转自:/yangxuli/p/6434508.html
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:176637次
积分:3495
积分:3495
排名:第10281名
原创:143篇
转载:247篇
文章:13篇
阅读:6841
(4)(11)(1)(12)(16)(9)(7)(28)(19)(16)(37)(17)(21)(11)(6)(40)(18)(40)(31)(28)(2)(9)(7)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'STM32调试过程中,读保护,写保护造成的无法擦写芯片问题的解决办法和相关讨论 - STM...
我的图书馆
STM32调试过程中,读保护,写保护造成的无法擦写芯片问题的解决办法和相关讨论 - STM...
23:09 | | |
调试Flash读保护时,Jlink不能下载程序
22:54 | 作者: linew | 来源: StmFans思蜕盟 OPELC 自由电子联盟
调试flash读保护时,点了jlink中Unsecure chip 后 能连接、能擦出芯片,但不能下载程序和读芯片,请问怎样解决···binglin ( 22:59:47)J-Flase ARM里下载程序,芯片型号不对是写不进程序的。检查芯片型号是否配置正确菜单:Options-&CPU页。截图15.jpg在配置CPU时,一定要在Device这项里配置CPU型号,不能在Core这项里配置。linew ( 23:46:31)CPU型号已选对,具体情况是我下载了一个读保护的程序,接着点了jlink-》target-》Unsecure chip ,接着点了擦除芯片,之后就不能读出芯片和烧程序了,但依然可以connect 和 erase chip ; 点 Read back 和 program 时 出现弹出错误提示 PC=··· ,R0=···· R1=···(明天附上图片)linew ( 09:10:56)Jlink出错未命名.JPGlinew ( 09:11:44)- Connecting ...& & - Connected successfully- 128 sectors, 1 range, 0x8000000 - 0x803FFFF- RAM tested O.K.- ERROR: PC of target system has unexpected value after blank checking. (PC = 0xFFFFFFFE)!---------------------------------------------------------------------- Registers -------------------------------------------------------------------------------------& && && && &PC& &= FFFFFFFECurrent:& && &&&R0& &= ,& && &&&R1& &= ,& && &&&R2& &= ,& && &&&R3& &= & && && && &R4& &= ,& && &&&R5& &= 0000B7FC,& && &&&R6& &= 000000FF,& && &&&R7& &= ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ERROR: Failed to read back target memoryDisconnecting ...- Disconnectedlinew ( 13:30:54)binglin在吗binglin ( 14:06:46)你这种现象我上个月也遇到过,当时也是用V4.08l的驱动。你换更换J-LINK的驱动程序,不要用V4.08l版。linew ( 14:16:32)一开始用4.08, 之后我用4.11也是出现同样情况binglin ( 17:12:17)试试用4.04a版本的,这个版本坛子上的下载,你找一下。linew ( 11:24:42)应该不行,我用ISP 读芯片,提示芯片已加密,无法读取信息;还有用ST 的Flash loader demo 串口提示芯片加了读保护,当点解除读保护,提示命令无效binglin ( 11:33:31)配置读保护是可以清除的,我在写入到应用板时都配置的读保护,很多时候修改了程序后要更新程序(要解除读保护更新程序),经无数次实操圾明是没有问题的。ISP也经常用,它在仿真器不能正常仿真目标板时,当用仿真器也无法解锁芯片时,,ISP是最后的也就是最可靠的解锁工具。linew ( 13:03:58)问题已解决,可能是在jlink那里点了Unsecure chip,所以用ISP无法解锁了;在RAM中运行int main(void){ &&RCC_DeInit(); &&FLASH_Unlock();&&FLASH_ReadOutProtection(DISABLE); }问题解决了。参考链接:/bbs/viewth ... B%E4%B8%93%E8%B4%B4linew ( 13:07:11)请问binglin stm32最有效的加密或保护方法是哪种,读保护算不算呢ID加密 或加密算法怎样binglin ( 14:12:33)
问题已解决,可能是在jlink那里点了Unsecure chip,所以用ISP无法解锁了;在RAM中运行int main(void){ &&RCC_DeInit(); &&FLASH_Unlock();&&FLASH_ReadOutProtection(DISABLE); }问题解决了。参考链接:htt ...linew 发表于
在JLINK里捃行了Unsecure chip,ISP同样可以解开的,其实&&“FLASH_Unlock(); FLASH_ReadOutProtection(DISABLE); ”其实与ISP里面的解锁代码是一样的。binglin ( 14:15:28)
请问binglin stm32最有效的加密或保护方法是哪种,读保护算不算呢ID加密 或加密算法怎样linew 发表于
读保护算就是加密了。wqb202 ( 00:39:46)有个问题想请教一下binglin ,如果用secure chip加密,断电重上电后,还可以重新用Jlink重新连接芯片吗?如果能那么是直接下载程序会清除读保护吗?还是在先UNsecure chip才能再下载!现在手上没有开发板,只有在调试项目的板子,没有引出COM口ISP,所以不敢试呀!binglin ( 13:37:53)用secure chip加密,断电重上电后,Jlink当然可以重新连接芯片,如果不能又怎么还能够执行Unsecure chip呢?secure chip加密后,断电或不断电重启都是肯定可以重新连接的。如果在secure chip加密要再次下载,则先连接芯片然后执行UNsecure chip才能再下载,我一般是执行UNsecure chip后直接按F7(自动模式)将程序写进去。注:执行UNsecure chip,JLINK与目标板会自动断开,直接按F7(自动模式)执行时,JLINK会自动联接、擦除芯片、写入及校验以及执行secure chip,这些操作是否全部执行由你的配置决定。
STM32对内部Flash的内容有专门的保护措施转自:21ic& &作者:香水城所有STM32的芯片都提供对Flash的保护,防止对Flash的非法访问——写保护和读保护。读保护是作用于整个Flash存储区,一旦设置了Flash的读保护,内置的Flash存储区只能通过程序的正常执行才能读出,而不能通过下述任何一种方式读出:  通过调试器(JTAG或SWD)  从RAM中启动并执行的程序写保护是以四页(1KB/页)Flash存储区为单位提供保护,对被保护的页实施编程或擦除操作将不被执行,同时产生操作错误标志。以下是一个简单的小结:读保护  写保护  对Flash的操作功能有效   有效   CPU只能读;禁止调试和非法访问有效   无效   CPU可以读写;禁止调试和非法访问;页0~3为写保护无效   有效   CPU可读;允许调试和非法访问无效   无效   CPU可以读写;允许调试和非法访问
下面的则是我的经历:我昨天晚上突然就发现芯片被读保护了,我没有设对应的选项啊,不知怎么回事.今天搞定之后发现还是时不时的会自己变成读保护,郁闷中.我板子的症状:1. 无法有Keil上的jlink方式下载,无法擦除.2. 使用官方的flash loader demo:第一步连接之后,出现红字,提示:the target is read protected. Please click "remove protection" to remove the protectiion. WARNING:when you click "Remove protection" the flash will be mass erased and all data will be lost.然后是remove protection按钮.点击这个按钮:This command is not supported by the target.解决办法:(我是看了多篇文章才知道原来Jlink arm有一个unsecure chip的命令的.)1. 在一个类似于D:\Program Files\SEGGER\JLinkARM_V404a的目录下找到JFlashARM.exe.点击它.2. options-&project settings-&production 勾选secure chip.这一项的作用是让你的另一个菜单项可以使用secure chip 和unsecure chip命令.如图:3. Target-&connect.这里要先连接板子才可以进行unsecure chip 操作.连接的时候我一开始连接不上,很郁闷.但是不小心把启动方的跳线冒弄掉了,却发现可以了.也就是说,我是在从片bootloader的启动方式下(即使用串口的那种方式)连接上的.连接上之后.targer-&unsecure chip.提示成功.4.正常用Keil里的下载方式就可以下载了.问题:1.我现可以下载了,但是用串口方式依然提示读保护状态.而且无法去掉,即串口方式没有改变.2.我用串口启动方式连接的jlink,这种方式可以连接jlink可以对芯片进行操作吗?以前记得是不能的.以前都是接上跳线冒才下载程序的.而我确定的确是可以用了,因为我现在安上跳线冒下载程序也能过了.如果谁能回答我的问题,欢迎讨论一下.
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&
喜欢该文的人也喜欢查看: 3122|回复: 8
UCOSII信号量有问题,CNT值会自己变化
主题帖子精华
初级会员, 积分 195, 距离下一级还需 5 积分
在线时间0 小时
我移植通过了,创建任务、删除任务这些实验也做过,没问题,然后我就准备来学习信号量,就发现问题了。
//这个是起始任务
void TaskStart(void * pdata)
&Sem_Event = OSSemCreate(1);&& //创建信号量&
&OSTaskCreate(MY_STK, (void * )0,(OS_STK *)&TaskMy_STK[LED_STK_SIZE], LED_TASK_Prio);
&OSTaskCreate(YOU_STK, (void * )0,(OS_STK *)&TaskYou_STK[LED_STK_SIZE], LED1_TASK_Prio);
&err=OSTaskDel(OS_PRIO_SELF);//删除自己&OSTaskSuspend(START_TASK_Prio);
我在开始任务中创建了一个信号量& Sem_Event = OSSemCreate(1);&&&&
&& 在运行完 TaskStart任务之后,就进入MY_STK任务。&&& MY_STK& 优先级比&& YOU_STK& 高
如果这个创建信号量放在 MY_STK,YOU_STK前面创建的话, 信号量的(tpye)类型也会发生变化(即不是Sem信号类型了)。
&& 这结果是我跟踪程序的时候发现的:
&&&&&在MY_STK任务的信号量请求和释放的函数中,程序运行了下列&&&& return (OS_ERR_EVENT_TYPE);& 这行语句,说明了信号量的类型发生改变了&&&& 如果我删除了& err=OSTaskDel(OS_PRIO_SELF);//删除自己&OSTaskSuspend(START_TASK_Prio);&& 这条语句的话,信号量类型又不会发生变化
&&&&& 这到底是怎么回事的呢?&
&&&& if (pevent-&OSEventType != OS_EVENT_TYPE_SEM) {&& /* Validate event block type&&&&&&&&&&&&&&&&&&&& */
&&&&&&& return (OS_ERR_EVENT_TYPE);
void MY_STK(void * pdata)
&& OSSemPend(Sem_Event,0,&err);&& //请求信号量
&& GPIO_ResetBits(GPIOA,GPIO_Pin_8);
&& OSSemPost(Sem_Event);&&&&&&&&& //发送(释放)信号量
&& OSTimeDlyHMSM(0,0,0,250);
这个任务的&&& OSSemPend(Sem_Event,0,&err);&& //请求信号量&&& 前面 加上一个测量信号量Sem_Event-&OSEventCnt的值发现,我都还没请求信号量的呢,OSEventCnt的值就变成0了。
下面这个是YOU_STK任务
void YOU_STK(void * pdata)
&& OSSemPend(Sem_Event,0,&err);&&&&&& //请求信号量
&& GPIO_ResetBits(GPIOD,GPIO_Pin_2);
&& OSSemPost(Sem_Event);&&&&&&&&& //发送(释放)信号量
&& OSTimeDlyHMSM(0,0,0,250);
经过我初步验证后& 貌似是&& 每次切换任务的时候&& 信号量的CNT值就会发生变化。
&&&& 还有,我在MY_STK 任务的& OSSemPost(Sem_Event);&&&&&&&&& //发送(释放)信号量& 后检测到了CNT的值会变为1,但是经过
OSTimeDlyHMSM(0,0,0,250);& 之后跳入YOU_STK任务的时候,在& OSSemPend(Sem_Event,0,&err);&&&&&& //请求信号量
之前来检测CNT的值,发现又变为0了,真奇怪
&&&&&&&& 我没发现任务切换和信号量有什么关系啊。&&&&&
&&&&&& 我百思不得其解,这是什么原因呢?
& 我粗略的跟踪了下程序,发现没有什么和信号量等变化有关的函数和变量。
&&&& 请各位兄弟姐妹门忙帮解决一下
主题帖子精华
金钱116317
在线时间880 小时
战舰板的信号量和邮箱实验,你可以在这个上面测试下。
这个代码是经过我们验证的,无问题。
10:49 上传
点击文件名下载附件
254.98 KB, 下载次数: 507
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 195, 距离下一级还需 5 积分
在线时间0 小时
回复【2楼】正点原子:
---------------------------------
我的UCOSII是自己移植的,会不会有移植缺陷造成的啊?
&&&&可是任务的切、创建和删除,与信号量里面的各个参数应该是没有变化的吧。
&&怎么我挂起&开始任务或者删除开始任务,都会导致信号量类型的变化;
&&&&还有把信号量的创建放到任务创建的前面和后面,都会信号量发生改变,导致实验结果的不同。
&
&&&最后一个是&&&任务的切换&怎么会导致信号量CNT计数值的改变?
主题帖子精华
金钱116317
在线时间880 小时
估计是你跟踪方法有问题。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 195, 距离下一级还需 5 积分
在线时间0 小时
回复【4楼】正点原子:
---------------------------------
我直接用if判断CNT的值,然后用LED来显示结果,也得到的是CNT值在切换任务的时候发生了变化。
&&&在信号量请求和释放的时候,CNT值变化是正常的,可是一经过&OSTimeDlyHMSM(0,0,0,250);
&这个语句切换出去的时候,在另一个任务的开头,也用if语句和LED显示来测量CNT的值,就发生了改变了。比如在&MY_STK任务切换出去之前&CNT值是&1&,&在YOU_STK任务的开头测CNT的值,就变为0了
&&&&还有,我直接把你发过来的&UCOSII&文件夹里面的东西移植到我程序里面,发现有118个问题,而且都是说&&UCOSII.H与别的.C文件里面声明有重复的,类似下面这个,全都是这种错误
&&UCOSII实验二.axf:&Error:&L6200E:&Symbol&OSTimeGet&multiply&defined&(by&ucos_ii.o&and&os_time.o).
&&& 好像我解决了,貌似是建立2个任务的时候堆栈没有减一造成的
OSTaskCreate(MY_STK, (void * )0,(OS_STK *)&TaskMy_STK[LED_STK_SIZE], LED_TASK_Prio);
&OSTaskCreate(YOU_STK, (void * )0,(OS_STK *)&TaskYou_STK[LED_STK_SIZE], LED1_TASK_Prio);&
OSTaskCreate(MY_STK, (void * )0,(OS_STK *)&TaskMy_STK[LED_STK_SIZE-1], LED_TASK_Prio);
&OSTaskCreate(YOU_STK, (void * )0,(OS_STK *)&TaskYou_STK[LED_STK_SIZE-1], LED1_TASK_Prio);&
这样,貌似就OK了,我再去测试一下。
主题帖子精华
初级会员, 积分 195, 距离下一级还需 5 积分
在线时间0 小时
回复【4楼】正点原子:
---------------------------------
没错原子哥,就是那创建任务的时候堆栈没有减一造成的。
&&&具体为什么没减一会造成这样的原因,我也不太清楚。
&&请看到这文章的兄弟姐妹们也多多注意一下,以后用上UCOSII的时候,创建任务一定要小心谨慎啊,一定要把堆栈减一啊,否则出现莫名其妙的问题,会找晕人的。
&&&&&&&&最后再感谢一下原子哥。
&&还有,为什么移植你发的UCOSII文件夹过来,会出现那么多&重复定义的问题啊?我移植mini板的时候和UCOSII2.52源码的时候也是出现上百个这种重复定义的问题。还不知道怎么解决。
&&&然后我就用不不清晰介绍的那种版本移植去了,然后没发现重复定义的问题
主题帖子精华
金钱116317
在线时间880 小时
回复【6楼】颓废ю小寶:
---------------------------------
我怎么没发现报这种错误啊?
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 195, 距离下一级还需 5 积分
在线时间0 小时
回复【7楼】正点原子:
---------------------------------
不知道哦,我是光光把UCOSII文件夹里面3个子文件夹拿出来弄到我自己的程序当中的,发现会报错,是重复定义的问题,而且都是UCOS_II.H与各个.c源文件中一些函数重复定义。
&&&&我用mini板中的UCOSII文件夹也是的,而且我自己到网上下载的UCOSII2.52版的源文件移植也出现相同的问题,只是问题个数不同。
&&&我尝试过把UCOS_II.H文件中有关重复定义的函数注释掉,但是问题也没减少,我也不太清楚是怎么回事。会不会头文件重复包含造成的?
&&&&最后我是参考了不不清晰的解说,然后下载2.8几版本的UCOSII,然后把例程移植过来,才成功滴。移植2.8几版本的过程却没有发现那个重复定义的报错
主题帖子精华
金钱116317
在线时间880 小时
哦哦,我现在都用2.91.
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
Powered by}

我要回帖

更多关于 maven运行定时器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信