完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
20个回答
|
|
源码,使用捕获的时候,每次采集的数据都不一样,而且在编译时会有警告,dval没有使用过。
int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_TIM4_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } /** System Clock Configuration */ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_PeriphCLKInitTypeDef PeriphClkInit; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = 16; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL8; RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1; HAL_RCC_OscConfig(&RCC_OscInitStruct); RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_TIM34; PeriphClkInit.Tim34ClockSelection = RCC_TIM34CLK_HCLK; HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit); __SYSCFG_CLK_ENABLE(); } /* TIM4 init function */ void MX_TIM4_Init(void) { TIM_ClockConfigTypeDef sClockSourceConfig; TIM_MasterConfigTypeDef sMasterConfig; TIM_IC_InitTypeDef sConfigIC; HAL_NVIC_SetPriority(TIM4_IRQn, 0x0D, 0x00); HAL_NVIC_EnableIRQ(TIM4_IRQn); htim4.Instance = TIM4; htim4.Init.Prescaler = 64-1; htim4.Init.CounterMode = TIM_COUNTERMODE_UP; htim4.Init.Period = 10000; htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_Base_Init(&htim4); sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig); HAL_TIM_IC_Init(&htim4); sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig); sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING; sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI; sConfigIC.ICPrescaler = TIM_ICPSC_DIV1; sConfigIC.ICFilter = 0; HAL_TIM_IC_ConfigChannel(&htim4, &sConfigIC, TIM_CHANNEL_1); HAL_TIM_Base_Start_IT(&htim4); HAL_TIM_IC_Start_IT(&htim4, TIM_CHANNEL_1); } /** Pinout Configuration */ void MX_GPIO_Init(void) { /* GPIO Ports Clock Enable */ __GPIOB_CLK_ENABLE(); } /********************************************************************************************************/ __weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { /* NOTE : This function Should not be modified, when the callback is needed, the __HAL_TIM_IC_CaptureCallback could be implemented in the user file */ uint16_t tmpccer; uint32_t dval; tmpccer = htim->Instance->CCER; if(tmpccer&(uint16_t)0x0002==0x00) { tmpccer &= (uint16_t)~((uint16_t)0x0002); tmpccer |= (uint16_t)0x0002; htim->Instance->CCER = tmpccer; __HAL_TIM_SetCounter(htim,0); } else { dval = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC1P); tmpccer |= (uint16_t)(TIM_ICPOLARITY_RISING); htim->Instance->CCER = tmpccer; } } |
|
|
|
|
|
|
|
应该是抓到长按的信号来的.
|
|
|
|
从示波器波形来看,应该是你一直按着不松开遥控器时采集的,是遥控器发出的重复码,但又感觉时间太短,一般重复码周期都大于40ms的。
红外协议有很多种: 1、ITT 协议,如IRT1250 和IRT1260发送芯片。 2、Nokia NRC17 协议,生产厂家Nokia CE。 3、Sharp 协议,主要应用于Sharp 的VCR 中。4、NEC 协议,如HS6221/6222、HT6221/6222 是采用NEC 协议的通用红外遥控发射芯片,亚洲主要用这个。 5、Philips RC-5 协议,发送芯片有:SAA3006、SAA3010、SAA3027 6、还有Philips RC-6 协议,Philips RECS-80 协议,以及Sony SIRC 协议等 单片机解码要看你遥控器发出的码遵循哪种协议(把遥控器拆开看看用的发送芯片是什么型号,查数据手册)。祝你好运! |
|
|
|
Lancy雪蜜紫 发表于 2018-10-3 21:00 我是用的示波器的捕获模式采集的,这样不会采集到红外的起始码吗 |
|
|
|
|
|
|
|
|
|
来学习的。。。。
|
|
|
|
首先你要知道红外发码的编码,在解码吧
|
|
|
|
其实是遥控器没电了
|
|
|
|
多谢大家的热心回答
|
|
|
|
感觉你捕捉的不太对,我前些日子做过一个红外解码的 好像是TCL的 协议不清楚,一开始也没测波形,根据经验测红外就是计算出他的高低电平是多少 然后判断哪个组合是1哪个组合是0就行了,用定时器捕捉一下
http://www.xiaovdiy.cn/?post=138这篇文章能帮助你 |
|
|
|
hzdembed 发表于 2018-10-3 22:35 非常感谢,我开始就是不知道我设置的定时器对不对 |
|
|
|
用示波器CH2测发射的编码,看看与CH1接收的编码一样么?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Lancy雪蜜紫 发表于 2018-10-3 21:00 确认是NEC,遥控器没电了,我也是醉了,呵呵 |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1412 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1347 浏览 3 评论
2850 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1494 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1927 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 19:51 , Processed in 5.011308 second(s), Total 109, Slave 93 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号