如何使两行端口的开关频率不同?

How to make switching frequency for two lines of ports different?

一个输出的开关频率必须是第二个输出的两倍,而不是相同。 我不明白如何设置它。 这是我的代码和接收到的信号。

#include "RTE_Components.h"
#include CMSIS_device_header

void delay(volatile uint32_t count)
{
    while(count--)
    {
        __nop();
    }
}

int main()
{
    *(uint32_t*)(0x40021018) |= 0x00000004;//RCC->APB2ENR |= RCC_APB2ENR_IOPAEN
    
    RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
    
    *(uint32_t*)(0x40010804) &= ~(0x00003000 | 0x0000C000);//GPIOB->CRH &= ~(GPIO_CRH_MODE11 | GPIO_CRH_CNF11)
    
    GPIOB->CRH &= ~(GPIO_CRH_MODE13 | GPIO_CRH_CNF13);
    
    *(uint32_t*)(0x40010804) |= 0x00002000;//SET_BIT(GPIOA->CRH, GPIO_CRH_MODE11_1)
    SET_BIT(GPIOB->CRH, GPIO_CRH_MODE13_1);
    
    for(;;)
    {
        *(uint32_t*)(0x40010810) = 0x00000800;//GPIOA->BSRR = GPIO_BSRR_BS11
        delay(6000);
        GPIOB->BSRR = GPIO_BSRR_BS13;
        delay(1560);
        *(uint32_t*)(0x40010814) = 0x00000800;//GPIOA->BRR = GPIO_BRR_BR11
        delay(6000);
        GPIOB->BRR = GPIO_BRR_BR13;
        delay(1560);
    }
}

image signals

您的无限循环中需要一个计数器,每次执行循环时该计数器都会增加。

您需要在每次执行循环时切换第一个输出。

第二个输出需要每隔一秒切换一次。即每次计数器 %2 == 0.

int cnt = 0;
for(;;) 
{
    output1 ^= 1;
    if (cnt % 2 == 0) 
        output2 ^= 1;
    delay(sometime);
    cnt++;
}