利用stm32f103c8t6 写一段寄存器点灯的程序,要求:gpio A8端口输出,闪烁频率为500hz
时间: 2024-06-12 19:07:27 浏览: 9
以下是利用STM32F103C8T6写的寄存器点灯程序,满足要求:
```
#include "stm32f10x.h"
void SysTick_Handler(void)
{
static uint16_t cnt = 0; // 静态变量,用于计数
if(cnt++ < 1000 / 2) // 500Hz
{
GPIOA->BSRR = GPIO_BSRR_BS8; // 点亮LED
}
else
{
GPIOA->BSRR = GPIO_BSRR_BR8; // 熄灭LED
}
if(cnt >= 1000) cnt = 0; // 计数器清零
}
int main(void)
{
// 使能GPIOA时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
// 配置GPIOA8推挽输出,初始输出低电平
GPIOA->CRH &= ~(GPIO_CRH_CNF8 | GPIO_CRH_MODE8);
GPIOA->CRH |= GPIO_CRH_MODE8;
// 配置SysTick定时器为1ms中断
SysTick_Config(SystemCoreClock / 1000);
while(1)
{
// 主循环留空
}
}
```
程序的思路是利用SysTick定时器中断,在中断服务函数中控制LED的点灭。具体实现方法是通过一个静态计数器变量,每次中断时增加计数器,当计数器小于500时点亮LED,否则熄灭LED。计数器达到1000后清零。注意,这里使用了GPIO的BSRR寄存器控制输出状态,具体用法可以参考STM32F103C8T6的数据手册。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)