STM32最簡單的外設莫過于IO口的高低電平控制了, Proteus仿真STM32F103R6的跑馬燈程式,
一、原理圖

二、跑馬燈C程式
// 粗略延時函式
static void delay(unsigned int n)
{
for(unsigned int i=0; i<n; i++)
{
for(unsigned int j=0; j<1024; j++)
{
for(unsigned int k=0; k<1024; k++)
{
__asm("nop");
}
}
}
}
int main(void)
{
// 使能GPIOB埠時鐘
// RCC起始地址:0X40021000
// RCC_APB2ENR偏移地址:0X18
*(unsigned int *)(0X40021000 + 0X18) |= (1 << 3);
// 配置IO口為輸出模式
// CNFy[1:0]: 00 - 通用推挽輸出模式
// MODEy[1:0]:01 - 輸出模式,最大速度10MHz
for(unsigned int i=0; i<8; i++)
{
// GPIOB起始地址:0X40010C00
// GPIOx_CRL偏移地址:0X00
*(unsigned int *)(0X40010C00 + 0X00) |= (1 << (4*i+0));
*(unsigned int *)(0X40010C00 + 0X00) &= ~(1 << (4*i+1));
*(unsigned int *)(0X40010C00 + 0X00) &= ~(1 << (4*i+2));
*(unsigned int *)(0X40010C00 + 0X00) &= ~(1 << (4*i+3));
}
// 設定IO口為高電平,關閉LED燈
// GPIOB起始地址:0X40010C00
// GPIOx_ODR地址偏移:0X0C
*(unsigned int *)(0X40010C00 + 0X0C) |= 0xFF;
while(1)
{
for(unsigned int i=0; i<8; i++)
{
// 設定IO口為低電平,打開LED燈
// GPIOB起始地址:0X40010C00
// GPIOx_ODR地址偏移:0X0C
*(unsigned int *)(0X40010C00 + 0X0C) &= ~(1 << i);
delay(1);
// 設定IO口為高電平,關閉LED燈
// GPIOB起始地址:0X40010C00
// GPIOx_ODR地址偏移:0X0C
*(unsigned int *)(0X40010C00 + 0X0C) |= (1 << i);
delay(1);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/250286.html
標籤:其他
上一篇:阿里云+PicGo+Typora實作有圖床的MarkDown
下一篇:通信格式和資料格式
