STM32 学习4 寄存器编程跑马灯示例
Posted 编程圈子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32 学习4 寄存器编程跑马灯示例相关的知识,希望对你有一定的参考价值。
一、说明
本章节对前一篇内容进行适当修改,通过寄存器操作控制开发板8个LED灯点亮、熄灭。
二、项目架构
三、源代码及说明
1. 跑马灯
#include"stm32f10x.h"
#include "stm32f10x_lib.h"
#include<stdio.h>
void SystemInit(){
}
// 简单的延迟操作
void delay(u32 i){
while(i--);
}
void init(int position){
// 设置通用推挽输出
GPIOC_CRL &= ~(0x0f<<(4*position));
GPIOC_CRL |= (3<<4*position);
}
void on(int position){
GPIOC_BSRR = (1<<(16+position));
}
void off(int position){
GPIOC_BSRR=(1<<(position));
}
int main(void){
int diff=2;
int j;
// 打开GPIOC时钟
RCC_APB2ENR |= 1<<4;
// 初始化8个引脚,全设置为熄灭
for(j=0;j<8;j++){
init(j);
off(j);
}
while(1){
// 重复设置8个引脚
for(j=0;j<8;j++){
on(j);
delay(0xfffff);
off(j);
delay(0xfffff);
}
}
}
2. 显示数值
#include"stm32f10x.h"
#include "stm32f10x_lib.h"
#include<stdio.h>
void SystemInit(){
}
// 简单的延迟操作
void delay(u32 i){
while(i--);
}
void init(int position){
// 设置通用推挽输出
GPIOC_CRL &= ~(0x0f<<(4*position));
GPIOC_CRL |= (3<<4*position);
}
/**
打开一个引脚
*/
void on(int position){
GPIOC_BSRR = (1<<(16+position));
}
/**
关闭一个引脚
*/
void off(int position){
GPIOC_BSRR=(1<<(position));
}
void onArray(int array[], int len){
int j;
for(j=0;j<len;j++){
on(array[j]);
}
}
void allOff(){
int j;
for(j=0;j<8;j++){
off(j);
}
}
void light1(){
int arr[] = {1, 2};
onArray(arr, 2);
}
void light2(){
int arr[] = {0,1,6,4,3};
onArray(arr, 5);
}
void light3(){
int arr[] = {0,1,6,2,3};
onArray(arr, 5);
}
void light4(){
int arr[] = {5,6,1,2};
onArray(arr, 4);
}
int main(void){
int diff=2;
int j;
// 打开GPIOC时钟
RCC_APB2ENR |= 1<<4;
// 初始化8个引脚,全设置为熄灭
for(j=0;j<8;j++){
init(j);
off(j);
}
while(1){
// 重复设置8个引脚
light1();
delay(0xfffff);
allOff();
light2();
delay(0xfffff);
allOff();
light3();
delay(0xfffff);
allOff();
light4();
delay(0xfffff);
allOff();
}
}
效果:
这里对一些函数进行了初步的封装。下次看看能不能再封装一个函数,可以调用以后直接用来显示数字。
以上是关于STM32 学习4 寄存器编程跑马灯示例的主要内容,如果未能解决你的问题,请参考以下文章