本帖最后由 Alden 于 2024-10-23 15:19 编辑
#申请原创# #技术资源#
APM32F003输入封装只有20pin,看起来是功能很简单的芯片,但外设功能都很全面。比如定时器模块,输入输出、计数、编码器接口模式等,都是支持的。
接下来就在SDK的基础上测试了下定时器的多通道输入捕获。
首先需要对定时器进行初始化,我测试开了TIM2的三个通道同时作输入捕获功能。
- void TMR2_Init(void)
- {
- TMR2_ICConfig_T icConfig;
- GPIO_Config_T gpio_struct;
-
- gpio_struct.pin = GPIO_PIN_5;
- gpio_struct.speed = GPIO_SPEED_10MHz;
- gpio_struct.mode = GPIO_MODE_IN_FLOATING;
- gpio_struct.intEn = GPIO_EINT_DISABLE;
- GPIO_Config(GPIOC, &gpio_struct);
-
- gpio_struct.pin = GPIO_PIN_2|GPIO_PIN_3;
- gpio_struct.speed = GPIO_SPEED_10MHz;
- gpio_struct.mode = GPIO_MODE_IN_FLOATING;
- gpio_struct.intEn = GPIO_EINT_DISABLE;
- GPIO_Config(GPIOD, &gpio_struct);
- /* Set counter = 0XFF, divider = 4 */
- // TMR2_ConfigTimerBase(47, 500);
- /* Set Input Capture Channel */
- icConfig.channel = TMR2_CHANNEL_1;
- /* Set Input Capture filter */
- icConfig.filter = 0;
- /* Set Input Capture divider */
- icConfig.div = TMR2_IC_DIV_1;
- /* Set Input Capture polarity */
- icConfig.polarity = TMR2_IC_POLARITY_FALLING;
- /* Set Input Capture selection */
- icConfig.selection = TMR2_IC_SELECT_DIRECTTI;
- TMR2_ConfigInputCapture(&icConfig);
- icConfig.channel = TMR2_CHANNEL_2;
- /* Set Input Capture filter */
- icConfig.filter = 0;
- /* Set Input Capture divider */
- icConfig.div = TMR2_IC_DIV_1;
- /* Set Input Capture polarity */
- icConfig.polarity = TMR2_IC_POLARITY_FALLING;
- /* Set Input Capture selection */
- icConfig.selection = TMR2_IC_SELECT_DIRECTTI;
- TMR2_ConfigInputCapture(&icConfig);
-
- icConfig.channel = TMR2_CHANNEL_3;
- /* Set Input Capture filter */
- icConfig.filter = 0;
- /* Set Input Capture divider */
- icConfig.div = TMR2_IC_DIV_1;
- /* Set Input Capture polarity */
- icConfig.polarity = TMR2_IC_POLARITY_FALLING;
- /* Set Input Capture selection */
- icConfig.selection = TMR2_IC_SELECT_DIRECTTI;
- TMR2_ConfigInputCapture(&icConfig);
- TMR2_EnableInterrupt(TMR2_INT_UPDATE|TMR2_INT_CH1CC|TMR2_INT_CH2CC|TMR2_INT_CH3CC);
- NVIC_EnableIRQRequest(TMR2_UO_IRQn, 0x0f);
- NVIC_EnableIRQRequest(TMR2_CC_IRQn, 0x0f);
- /* Enable TMR2 */
- TMR2_Enable();
- }
然后是在定时器 中断服务函数中进行处理。
|