#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
int main(void)
{
u8 t;
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init(); //初始化与按键连接的硬件接口
while(1)
{
t=KEY_Scan();//得到键值
if(t)
{
switch(t)
{
case 1:
LED0=!LED0;
LED2=!LED2;
break;
case 2:
LED1=!LED1;
LED3=!LED3;
break;
case 3:
LED0=!LED0;
LED1=!LED1;
LED2=!LED2;
LED3=!LED3;
break;
}
}else delay_ms(10);
}
}


按键子程序
#include <stm32f10x_lib.h>
#include "key.h"
#include "delay.h"
//////////////////////////////////////////////////////////////////////////////////
//********************************************************************************
//V1.1修改说明
//修改按键扫描函数,使整个代码可以支持SWD下载。
//////////////////////////////////////////////////////////////////////////////////
//按键初始化函数
//特别注意:在该函数之后,JTAG将无法使用(SWD也无法使用)
//如果想JTAG仿真,可以屏蔽该函数。
//PA0.PC13.PF11 设置成输入
void KEY_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);//使能APB2外设GPIOF时钟
//RCC->APB2ENR|=1<<2; //使能PORTA时钟
//RCC->APB2ENR|=1<<4; //使能PORTC时钟
GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入
GPIOA->CRL|=0X00000008;
GPIOC->CRH&=0XFF0FFFFF;//PC13设置成输入
GPIOC->CRH|=0X00800000;
GPIOF->CRH&=0XFFFF0FFF;//PF11设置成输入
GPIOF->CRH|=0X00008000;
GPIOC->ODR|=1<<13; //PC13上拉,PA0默认下拉
GPIOF->ODR|=1<<11; //PF11上拉
}
//按键处理函数
//返回按键值
//0,没有任何按键按下
//1,KEY0按下
//2,KEY1按下
//3,KEY2按下 WK_UP
//注意此函数有响应优先级,KEY0>KEY1>KEY2!!
u8 KEY_Scan(void)
{
static u8 key_up=1;//按键按松开标志
JTAG_Set(JTAG_SWD_DISABLE);
if(key_up&&(KEY0==0||KEY1==0||KEY2==1))
{
delay_ms(10);//去抖动
key_up=0;
if(KEY0==0)
{
JTAG_Set(SWD_ENABLE);
return 1;
}
else if(KEY1==0)
{
JTAG_Set(SWD_ENABLE);
return 2;
}
else if(KEY2==1)
{
JTAG_Set(SWD_ENABLE);
return 3;
}
}else if(KEY0==1&&KEY1==1&&KEY2==0)key_up=1;
JTAG_Set(SWD_ENABLE);
return 0;// 无按键按下
}

LED子程序
#include <stm32f10x_lib.h>
#include "led.h"
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//初始化PE2,3,4,5为输出口.并使能这4个口的时钟
//LED IO初始化
void LED_Init(void)
{
RCC->APB2ENR|=1<<6; //使能PORTE时钟
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
GPIOE->CRL&=0XFF0000FF;
GPIOE->CRL|=0X00333300;//PE2,3,4,5 通用推挽输出
GPIOE->ODR|=1<<8; //PE2,3,4,5 输出高
}

后来发现增大电容也有可能解决问题,于是把电容值换成了10uF(这次做DIY,配的10uF的电容还是有富余的),用万用表测量了相关电容的电压值,发现有很大变化,两端的电压值都有明显提高。然后,着急把串口连接上,用串口下载软件(ST的官方软件)一测试果然可以识别芯片了,很是高兴啊!!!
经过验证:仅需要将C39、C40替换即可解决问题,不用花钱换进口3232了,也免去了重复拆焊造成焊盘脱落的危险了。目前串口通信正常!
申请加精华啊!!!嘿嘿
回复
打赏帖 | |
---|---|
汽车电子中巡航控制系统的使用被打赏10分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 | |
分享电子控制安全气囊计算机知识点被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【OZONE】使用方法总结被打赏20分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K314】芯片启动流程分析被打赏40分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K146】S32DS RTD 驱动环境搭建被打赏12分 | |
【分享开发笔记,赚取电动螺丝刀】【IAR】libc标注库time相关库函数使用被打赏23分 | |
LP‑MSPM0L1306开发版试用结果被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【LP-MSPM0L1306】适配 RT-Thread Nano被打赏23分 |