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 寄存器编程跑马灯示例的主要内容,如果未能解决你的问题,请参考以下文章

STM32F103五分钟入门系列SysTick滴答定时器+SysTick中断实现跑马灯

菜鸟学STM32之跑马灯

精通《IIC通信》

精通《IIC通信》

STM32F103(二十)DAC(贼详细)

STM32F103(十八)ADC总结(贼详细)