目录
一.使用寄存器方式点亮流水灯
1.实验器材
2.实验思路
3.1程序代码
3.2运行效果
4.1加入P13管脚
(1)程序代码
(2)运行效果
(3)实验图思考
(4)改进代码
(5)改进后运行效果
二.使用标准库方式点亮流水灯
1.复制相关库文件到文件夹中
(1)如同添加文件夹core,lib,obj
(2)下载库函数文件
2.添加文件到工程
(1)core中
(2)lib中
(3)obj中
3.配置工程
(1)添加文件到工程
(2)选择OutPut路径,选择自己的obj文件,生成hex文件
(3)配置全局宏量
4.程序代码
5.运行效果
单片机:stm32f103C8T6
TTL转接口
三个红黄绿LED发光二极管
若干杜邦线
KeilMDK软件
单片机下载软件mcuisp
使用引脚:A1,B1,B10
设置三个灯分别为A1,B1,B10
使用while循环给寄存器附不同的高低电平使三个灯达到下列状态
(1)A1亮,B1,B10熄灭
(2)B1亮,A1,A10熄灭
(3)B10亮,A1,B1熄灭
//APB2外设时钟使能寄存器
#define RCC_APB2ENR *((unsigned volatile int*)0x40021018)
//选择CPIOA1,GPIOB1,GPIOB10作为点灯输出引脚
#define GPIOA_CRL *((unsigned volatile int*)0x40010800) //GPIOA配置寄存器
#define GPIOB_CRL *((unsigned volatile int*)0x40010C00) //GPIOB配置低寄存器
#define GPIOB_CRH *((unsigned volatile int*)0x40010C04) //GPIOB配置高寄存器
#define GPIOA_ODR *((unsigned volatile int*)0x4001080C) //GPIOA输出数据寄存器
#define GPIOB_ODR *((unsigned volatile int*)0x40010C0C) //GPIOB输出数据寄存器//延时函数
void Delay_ms( volatile unsigned int t){unsigned int i,j;for(j = 0; j < t; j++){for(i = 0; i < 1000 ; i++);}
}int main() {//使能a,b时钟RCC_APB2ENR|=1<<2;RCC_APB2ENR|=1<<3;//GPIOA1设置为推挽输出GPIOA_CRL&=0xFFFFFF0F; //设置位 清零GPIOA_CRL|=0x00000030; //PA1推挽最快速输出//GPIOB1设置为推挽输出GPIOB_CRL&=0xFFFFFF0F;GPIOB_CRL|=0x00000030;//GPIOB10设置为推挽输出GPIOB_CRH&=0xFFFFF0FF;GPIOB_CRH|=0x00000300;while(1){//位操作置B1,B10低电平,A1高电平GPIOB_ODR&=~(1<<1);GPIOB_ODR&=~(1<<10);GPIOA_ODR|=1<<1;Delay_ms(10000);//位操作置A1,B10低电平,B1高电平GPIOA_ODR=~(1<<1);GPIOB_ODR=~(1<<10);GPIOB_ODR|=1<<1;Delay_ms(10000);//位操作置A1,B1低电平,B10高电平GPIOA_ODR&=~(1<<1);GPIOB_ODR&=~(1<<1);GPIOB_ODR|=1<<10;Delay_ms(10000);}
}
LED1
//APB2外设时钟使能寄存器
#define RCC_APB2ENR *((unsigned volatile int*)0x40021018)
//选择CPIOA1,GPIOB1,GPIOB10作为点灯输出引脚
#define GPIOA_CRL *((unsigned volatile int*)0x40010800) //GPIOA配置寄存器
#define GPIOB_CRL *((unsigned volatile int*)0x40010C00) //GPIOB配置低寄存器
#define GPIOB_CRH *((unsigned volatile int*)0x40010C04) //GPIOB配置高寄存器
#define GPIOC_CRH *((unsigned volatile int*)0x40011004) //GPIOC配置高寄存器
#define GPIOA_ODR *((unsigned volatile int*)0x4001080C) //GPIOA输出数据寄存器
#define GPIOB_ODR *((unsigned volatile int*)0x40010C0C) //GPIOB输出数据寄存器
#define GPIOC_ODR *((unsigned volatile int*)0x4001100C) //GPIOC输出数据寄存器//延时函数
void Delay_ms( volatile unsigned int t){unsigned int i,j;for(j = 0; j < t; j++){for(i = 0; i < 1000 ; i++);}
}int main() {//使能a,b时钟RCC_APB2ENR|=1<<2;RCC_APB2ENR|=1<<3;RCC_APB2ENR|=1<<4;//GPIOA1设置为推挽输出GPIOA_CRL&=0xFFFFFF0F; //设置位 清零GPIOA_CRL|=0x00000030; //PA1推挽最快速输出//GPIOB1设置为推挽输出GPIOB_CRL&=0xFFFFFF0F;GPIOB_CRL|=0x00000030;//GPIOB10设置为推挽输出GPIOB_CRH&=0xFFFFF0FF;GPIOB_CRH|=0x00000300;//GPIOC13设置为推挽输出GPIOC_CRH&=0xFF0FFFFF;GPIOC_CRH|=0x00300000;while(1){//位操作置B1,B10, C13低电平,A1高电平GPIOB_ODR&=~(1<<1);GPIOB_ODR&=~(1<<10);GPIOC_ODR&=~(1<<13);GPIOA_ODR|=1<<1;Delay_ms(10000);//位操作置A1,B10, C13低电平,B1高电平GPIOA_ODR=~(1<<1);GPIOB_ODR=~(1<<10);GPIOC_ODR&=~(1<<13);GPIOB_ODR|=1<<1;Delay_ms(10000);//位操作置A1,B1, C13低电平,B10高电平GPIOA_ODR&=~(1<<1);GPIOB_ODR&=~(1<<1);GPIOC_ODR&=~(1<<13);GPIOB_ODR|=1<<10;Delay_ms(10000);//位操作置A1,B1, B10低电平,C13高电平GPIOA_ODR&=~(1<<1);GPIOB_ODR&=~(1<<1);GPIOB_ODR&=~(1<<10);GPIOC_ODR|=1<<13;//GPIOC_ODR&=~(1<<13);Delay_ms(10000);}
}
LED2
此时,将1置为高电平,将0置为低电平,根据上面实验图我们可看到此时发光二极管是不导通的,我们将P13的置位状态相反(0为高电平,1为低电平)
//APB2外设时钟使能寄存器
#define RCC_APB2ENR *((unsigned volatile int*)0x40021018)
//选择CPIOA1,GPIOB1,GPIOB10作为点灯输出引脚
#define GPIOA_CRL *((unsigned volatile int*)0x40010800) //GPIOA配置寄存器
#define GPIOB_CRL *((unsigned volatile int*)0x40010C00) //GPIOB配置低寄存器
#define GPIOB_CRH *((unsigned volatile int*)0x40010C04) //GPIOB配置高寄存器
#define GPIOC_CRH *((unsigned volatile int*)0x40011004) //GPIOC配置高寄存器
#define GPIOA_ODR *((unsigned volatile int*)0x4001080C) //GPIOA输出数据寄存器
#define GPIOB_ODR *((unsigned volatile int*)0x40010C0C) //GPIOB输出数据寄存器
#define GPIOC_ODR *((unsigned volatile int*)0x4001100C) //GPIOC输出数据寄存器//延时函数
void Delay_ms( volatile unsigned int t){unsigned int i,j;for(j = 0; j < t; j++){for(i = 0; i < 1000 ; i++);}
}int main() {//使能a,b时钟RCC_APB2ENR|=1<<2;RCC_APB2ENR|=1<<3;RCC_APB2ENR|=1<<4;//GPIOA1设置为推挽输出GPIOA_CRL&=0xFFFFFF0F; //设置位 清零GPIOA_CRL|=0x00000030; //PA1推挽最快速输出//GPIOB1设置为推挽输出GPIOB_CRL&=0xFFFFFF0F;GPIOB_CRL|=0x00000030;//GPIOB10设置为推挽输出GPIOB_CRH&=0xFFFFF0FF;GPIOB_CRH|=0x00000300;//GPIOC13设置为推挽输出GPIOC_CRH&=0xFF0FFFFF;GPIOC_CRH|=0x00300000;while(1){//位操作置B1,B10, C13低电平,A1高电平GPIOB_ODR&=~(1<<1);GPIOB_ODR&=~(1<<10);GPIOC_ODR|=1<<13;GPIOA_ODR|=1<<1;Delay_ms(10000);//位操作置A1,B10, C13低电平,B1高电平GPIOA_ODR=~(1<<1);GPIOB_ODR=~(1<<10);GPIOC_ODR|=1<<13;GPIOB_ODR|=1<<1;Delay_ms(10000);//位操作置A1,B1, C13低电平,B10高电平GPIOA_ODR&=~(1<<1);GPIOB_ODR&=~(1<<1);GPIOC_ODR|=1<<13;GPIOB_ODR|=1<<10;Delay_ms(10000);//位操作置A1,B1, B10低电平,C13高电平GPIOA_ODR&=~(1<<1);GPIOB_ODR&=~(1<<1);GPIOB_ODR&=~(1<<10);//GPIOC_ODR|=1<<13;GPIOC_ODR&=~(1<<13);Delay_ms(10000);}
}
LED
下载地址:STSW-STM32054 - STM32F10x标准外设库 - 意法半导体STMicroelectronics
STM32F10X_MD,USE_STDPERIPH_DRIVER
赋值到对应位置
#include "stm32f10x.h"void delay_ms(uint16_t time)
{uint16_t i = 0;while(time--){i = 10000;while(i--);}
}int main(void)
{//时钟使能A,BRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//配置GPIO_InitTypeDef led_initA1;led_initA1.GPIO_Pin = GPIO_Pin_1;led_initA1.GPIO_Mode = GPIO_Mode_Out_PP;led_initA1.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitTypeDef led_initB1;led_initB1.GPIO_Pin = GPIO_Pin_1;led_initB1.GPIO_Mode = GPIO_Mode_Out_PP;led_initB1.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitTypeDef led_initB10;led_initB10.GPIO_Pin = GPIO_Pin_10;led_initB10.GPIO_Mode = GPIO_Mode_Out_PP;led_initB10.GPIO_Speed = GPIO_Speed_10MHz;//初始化GPIO_Init(GPIOA, &led_initA1);GPIO_Init(GPIOB, &led_initB1);GPIO_Init(GPIOB, &led_initB10);while(1){GPIO_ResetBits(GPIOB, GPIO_Pin_1);GPIO_ResetBits(GPIOB, GPIO_Pin_10);GPIO_SetBits(GPIOA, GPIO_Pin_1);delay_ms(1000);GPIO_ResetBits(GPIOA, GPIO_Pin_1);GPIO_ResetBits(GPIOB, GPIO_Pin_10);GPIO_SetBits(GPIOB, GPIO_Pin_1);delay_ms(1000);GPIO_ResetBits(GPIOA, GPIO_Pin_1);GPIO_ResetBits(GPIOB, GPIO_Pin_1);GPIO_SetBits(GPIOB, GPIO_Pin_10);delay_ms(1000);}
}
LED
本文发布于:2024-02-01 01:59:18,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170672396233032.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |