如何使两行端口的开关频率不同?
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++;
}
一个输出的开关频率必须是第二个输出的两倍,而不是相同。 我不明白如何设置它。 这是我的代码和接收到的信号。
#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++;
}