自我介绍
这篇文章是我作为博客的第一篇文章,自己也将尝试经常更新相关博客,学的不是很优秀,也是督促自己通过博客的方式不断学习更多的技术,我也会发布除嵌入式以外其他领域的知识内容,大家一起学习,有错误或者问题希望大家积极指出批评。
正式开始
接下来是正式的内容,看到题目相信大家都不陌生,嵌入式专业超级入门级的一个小测试,先点个灯!!!关于STM32F1的开发板,不做过多的介绍,全网资料一大堆哦!!并且这个测试,
无需连外部杜邦线,用STLINK 下载程序,全速运行,可以看到LED D1(PB4引脚驱动)能200ms间隔闪烁。
代码片段
main.c
#include "delay.h"
#include "sys.h"
//LED 初始化PB4
void GPIO_Config_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口时钟使能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //PB4 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB4
GPIO_ResetBits(GPIOB,GPIO_Pin_4); //PB4 输出低
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE ); //配置复用时钟
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //全功能SW+JTAG,禁用JTRST,PB4可用
}
//主函数,采用外部8M晶振,72M系统主频,可以在void SetSysClock(void)函数中选择主频率设置
int main(void)
{
delay_init(); //延时函数初始化,通过Systick中断实现1ms延时功能
GPIO_Config_Init(); //初始化GPIO,PB4配置成推挽输出
while(1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_4);//PB4输出低
delay_ms(100);//等待100ms
GPIO_SetBits(GPIOB,GPIO_Pin_4);//PB4输出高
delay_ms(100);
}
}
可以提供delay.c
#include "delay.h"
//初始化延迟函数
//当使用OS的时候,此函数会初始化OS的时钟节拍
//配置等待时间单位为1ms
void delay_init(void)
{
if(SysTick_Config(SystemCoreClock / 1000))//systick中断配置,1ms进入中断一次,stm32f10x_it.c 文件中的SysTick_Handler函数中调用计数
{
}
}
static __IO uint32_t TimingDelay;//时间计数值
//1ms延时
void delay_ms(__IO uint32_t nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
//1ms被调用一次
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
sys.c
#include "sys.h"
//THUMB指令不支持汇编内联
//采用如下方法实现执行汇编指令WFI
void WFI_SET(void)
{
__ASM volatile("wfi");
}
//关闭所有中断
void INTX_DISABLE(void)
{
__ASM volatile("cpsid i");
}
//开启所有中断
void INTX_ENABLE(void)
{
__ASM volatile("cpsie i");
}
//设置栈顶地址
//addr:栈顶地址
__asm void MSR_MSP(u32 addr)
{
MSR MSP, r0
BX r14
}
这只是一个简单的小测试哦,希望刚刚接触的同学第一次小小的实验可以很顺利!!!