toggle - 如何使用 SYSTICK on keil 为 ST32 处理器切换不同频率的两个 LED
问题描述
我想切换每个 LED 一个 4Hz 和一个 3Hz,到目前为止,我只能以相同的频率切换 2 个。到目前为止,我只能单独执行它们,但我不知道如何编写代码来组合它们,所以我可以运行这一切都在同一时间。
// 此代码适用于两者
int main (void){
//Enable clock for GPIO A and Gpio B
RCC->AHB2ENR |= 0x3UL;
//Configure PA_0 and PA_1
GPIOA->MODER &= ~0xFUL ;
GPIOA->MODER |= 0x5UL;
GPIOA-> PUPDR &= ~0XFUL;
GPIOA-> PUPDR |= 0xAUL;
//对于 LED 绿色
SysTick ->LOAD = 1000000-1 ;
SysTick-> VAL = 0;
SysTick->CTRL |= 0x5UL;
while (1)
{
if (SysTick -> CTRL & SysTick_CTRL_COUNTFLAG_Msk)
{
GPIOA->ODR ^= 0x2UL;
}
}
}
//THEN 删除 LED GREEN TO WRITE LED 橙色
SysTick ->LOAD = 666667-1 ;
SysTick-> VAL = 0;
SysTick->CTRL |= 0x5UL;
while (1)
{
if (SysTick -> CTRL & SysTick_CTRL_COUNTFLAG_Msk)
{
GPIOA->ODR ^= 0x1UL;
}
}
}
我只需要帮助将它们组合起来,主要是每个 LED 的 systick->load。
解决方案
不要以这种方式使用 systick。设置要触发的 systick 中断让我们说每秒 1000 次(标准 STM 启动文件这样做)
然后在中断处理程序中切换 LED
volatile uint32_t count = 0;
void SysTick_Handler(void)
{
count++;
if(!(count % (1000 / 8))) GPIOA -> ODR ^= 1; // 4 blinks per secons
if(!(count % (1000 / 6))) GPIOA -> ODR ^= 2; // 3 blinks per second
}
推荐阅读
- python - AttributeError:“str”对象没有属性“apps”
- delphi - Delphi 10.4 本地化问题
- python - 姜戈 | 在 ModelForm 上出现循环导入错误
- jquery - 单击按钮更改元素jQuery的文本
- python - 无法在 PySpark SQLContext DataFrame 中显示列
- r - R编程循环
- c++ - 在 C++ 类中使用 const 关键字和按引用返回
- reactjs - 初始化前无法访问“fetchSomeData()”
- apache-kafka - 什么 Serde 用于 Avro 数组类型?(卡夫卡)
- android - 从服务器加载时如何设置图像视图大小取决于屏幕大小?