历史上的今天
今天是:2025年08月08日(星期五)
2019年08月08日 | STM32/STM8L/STM8S系列之一、流水灯
2019-08-08 来源:eefocus
一、STM32F103点亮LED
1、电路图:

2、代码:
//FUNCTION:LED初始化
//PARA :无
//RETURN :无
void LED_INIT(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB , ENABLE); //使能AFIO和GPIOB端口
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭PB3 PB4的复用功能,使能通用IO功能
//GPIO Structure
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4; //Chose Pin3 and Pin4
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //Set Frequency 50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOB, &GPIO_InitStructure); //GPIOB
}
//main函数
int main(void)
{
LED_INIT();
while (1)
{
GPIO_SetBits(GPIOB, GPIO_Pin_3); //LED3 ON
GPIO_ResetBits(GPIOB, GPIO_Pin_4); //LED4 OFF
mydelay_ms(500); //延时
GPIO_ResetBits(GPIOB, GPIO_Pin_3); //LED3 OFF
GPIO_SetBits(GPIOB, GPIO_Pin_4); //LED4 ON
mydelay_ms(500); //延时
}
}
3、LED点不亮原因:
一开始检查代码都正常,貌似没有错误,可是灯就是不亮,后来看手册发现原来PB3、PB4引脚都有个复用功能,系统默认使用了复用的功能,从而不再是通用IO输出功能,需要把复用功能关掉,才能正常输出IO信号。
如下图:

可以看到,默认功能是JTDO和JNTRST,所以把这两个功能关闭即可。对应代码为LED初始化函数 LED_INIT() 中的以下两行:
//关闭PB3 PB4的复用功能,使能PB2、PB3的通用IO功能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB , ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
二、STM8L151G6U6点亮LED
待补充
三、STM8S103点亮LED
1、流程
点亮LED,流程跟STM32基本一样:
(1)配置GPIO(STM8S不需要专门配置每个引脚的时钟,最开始的时候配置系统时钟即可)
(2)GPIO输出高低电平
废话不说,上代码:
2、上代码
//FUNCKTION: LED灯GPIO口初始化
//PARA : 无
//RETURN : 无
void LED_Config()
{
GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_SLOW);
GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_SLOW);
}
//FUNCKTION: 打开LED灯
//PARA : 无
//RETURN : 无
void LED_ON()
{
GPIO_WriteHigh(GPIOB, GPIO_PIN_4);
GPIO_WriteHigh(GPIOB, GPIO_PIN_5);
}
//FUNCKTION: 关闭LED灯
//PARA : 无
//RETURN : 无
void LED_OFF()
{
GPIO_WriteLow(GPIOB, GPIO_PIN_4);
GPIO_WriteLow(GPIOB, GPIO_PIN_5);
}
3、死活点不亮LED的坑
因为使用的是*PB4和PB5这两个GPIO口,查看数据手册可以看到如下图:

可以看到红圈内标记该GPIO口为T(3),继续下翻,到该表格的最下面,有关T(3)的描述:

英语不好,就不献丑翻译了,反正意思是要自己在外部添加上拉电阻或下拉电阻,不然没用。
史海拾趣
|
defun( gfe_HelloWorld ()prog( () mark = axlDBTransactionStart() axlControlRaise(\'options) HelloWorld_form_file = \"./HelloWorld.form\" _c ...… 查看全部问答> |
|
不间断电源常见名词解释注:如使用的不是原厂所规定的同规格保险丝有可能造成机器故障,或是引起线路起火,危害自身的安全。最好是使用原厂所规定的同规格保险丝,既可保护设备也可保护确保人身安全。 空气开关:一种电流保护装置,即当电流超过 ...… 查看全部问答> |
|
新兴的无线技术标准 随着人们对无线技术在过程工业中的应用兴趣持续增长,各种可用技术的数量也随之增加――要求为这些应用中的现场网络提供特定标准的愿望也增加了。 为过程工业而开发的无线标准目前有三个,分别是:WirelessHART(无线HART)、 ...… 查看全部问答> |
|
请问DC综合的乘法器是什么类型的?有必要再用verilog专门写一个乘法器吗? 大家好: 请问DC对于“*”综合出来的乘法器是什么类型的?有必要再用verilog专门写一个乘法器吗?现在我的工作时钟为20m左右,数据位数为32位的,需要乘法器在一个时 ...… 查看全部问答> |
|
在上一个文档中我给大家介绍了TI图形驱动库的结构,分为三层:显示驱动层,图形基元层,小工具层。其中显示驱动层是需要我们程序员自己补充的。现在我们来具体谈谈如果来补充和书写底层驱动函数。从ti的文档中我们可以看出,我们需要补充的就是tDis ...… 查看全部问答> |
|
各位兄弟大家好! 本人是学习单片机的新人,不仅是PIC,51单片机以前也没有接触过。 由于工作需要,从现在起需要学习PIC单片机,想听取各位兄弟的意见。 我的问题是汇编语言和C语言各自有什么特点,对于我这样的新手来 ...… 查看全部问答> |




