#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了,也免去了重复拆焊造成焊盘脱落的危险了。目前串口通信正常!
申请加精华啊!!!嘿嘿
回复
我要赚赏金打赏帖 |
|
|---|---|
| OK1126B-S开发板下以导航按键控制云台/机械臂姿态调整被打赏¥29元 | |
| 【树莓派5】便携热成像仪被打赏¥36元 | |
| 【树莓派5】环境监测仪被打赏¥35元 | |
| OK1126B-S开发板下多时段语音提示型电子时钟被打赏¥27元 | |
| OK1126B-S开发板下函数构建及步进电机驱动控制被打赏¥25元 | |
| 【S32K3XX】LPI2C 参数配置说明被打赏¥20元 | |
| OK1126B-S开发板的脚本编程及应用设计被打赏¥27元 | |
| 5v升压8.4v两节锂电池充电芯片,针对同步和异步的IC测试被打赏¥35元 | |
| 【S32K3XX】S32DS LPI2C 配置失败问题解决被打赏¥22元 | |
| 【S32K3XX】FLASH 的 DID 保护机制被打赏¥19元 | |
我要赚赏金
