【复旦微FM33LC046N评测】+ LED和KEY
本帖最后由 chrisrh 于 2021-2-8 22:24 编辑<p>临近年关,被接连出现的问题,给把原定的时间安排都打乱了···❤态坚强···</p>
<p> </p>
<p>简单使用了一下led和key,后续继续···</p>
<p>DEMO上面自带了四个LED灯,调用库函数完成点亮LED,库函数使用类似ST的库;</p>
<p>其中:</p>
<p>LED1----->PC0</p>
<p>LED2----->PC1</p>
<p>LED3----->PB10(J42跳冒短接使用)</p>
<p>LED4----->PB9(J43跳冒短接使用)</p>
<p> </p>
<p></p>
<p>先简单的用key调用IO点亮led灯</p>
<p>led.h</p>
<pre>
<code class="language-cpp">#ifndef __LED_H__
#define __LED_H__
#include "main.h"
#define LED1_GPIO GPIOC
#define LED1_PIN FL_GPIO_PIN_0
#define LED1_ON() FL_GPIO_ResetOutputPin(LED1_GPIO, LED1_PIN)
#define LED1_OFF()FL_GPIO_SetOutputPin(LED1_GPIO, LED1_PIN)
#define LED1_TOG()FL_GPIO_ToggleOutputPin(LED1_GPIO, LED1_PIN)
#define LED2_GPIO GPIOC
#define LED2_PIN FL_GPIO_PIN_1
#define LED2_ON() FL_GPIO_ResetOutputPin(LED2_GPIO, LED2_PIN)
#define LED2_OFF()FL_GPIO_SetOutputPin(LED2_GPIO, LED2_PIN)
#define LED2_TOG()FL_GPIO_ToggleOutputPin(LED2_GPIO, LED2_PIN)
#define LED3_GPIO GPIOB
#define LED3_PIN FL_GPIO_PIN_10
#define LED3_ON() FL_GPIO_ResetOutputPin(LED3_GPIO, LED3_PIN)
#define LED3_OFF()FL_GPIO_SetOutputPin(LED3_GPIO, LED3_PIN)
#define LED3_TOG()FL_GPIO_ToggleOutputPin(LED3_GPIO, LED3_PIN)
#define LED4_GPIO GPIOB
#define LED4_PIN FL_GPIO_PIN_9
#define LED4_ON() FL_GPIO_ResetOutputPin(LED4_GPIO, LED4_PIN)
#define LED4_OFF()FL_GPIO_SetOutputPin(LED4_GPIO, LED4_PIN)
#define LED4_TOG()FL_GPIO_ToggleOutputPin(LED4_GPIO, LED4_PIN)
void My_LEDInit(void);
void LED_Blink(uint8_t BlinkNum,uint16_t BlinkTime);
#endif</code></pre>
<p>led.c</p>
<pre>
<code class="language-cpp">#include "led.h"
#include "user_init.h"
void My_LEDInit(void)
{
uint8_t count = 5;
FL_GPIO_InitTypeDef GPIO_InitStruct;// = {0};
FL_GPIO_ResetOutputPin(LED1_GPIO, LED1_PIN);
FL_GPIO_ResetOutputPin(LED2_GPIO, LED2_PIN);
GPIO_InitStruct.pin = LED1_PIN|LED2_PIN;
GPIO_InitStruct.mode = FL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.pull = DISABLE;
FL_GPIO_Init(LED1_GPIO, &GPIO_InitStruct);
FL_GPIO_Init(LED2_GPIO, &GPIO_InitStruct);
FL_GPIO_ResetOutputPin(LED3_GPIO, LED3_PIN);
FL_GPIO_ResetOutputPin(LED4_GPIO, LED4_PIN);
GPIO_InitStruct.pin = LED3_PIN|LED4_PIN;
GPIO_InitStruct.mode = FL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.pull = DISABLE;
FL_GPIO_Init(LED3_GPIO, &GPIO_InitStruct);
FL_GPIO_Init(LED4_GPIO, &GPIO_InitStruct);
while (count--)
{
LED1_ON();LED2_ON();
DelayMs(100);
LED1_OFF();LED2_OFF();
DelayMs(100);
LED3_TOG();LED4_TOG();
DelayMs(100);
}
}
void LED_Blink(uint8_t BlinkNum,uint16_t BlinkTime)
{
uint8_t count = BlinkNum;
uint16_t time = BlinkTime;
while(count--)
{
LED1_ON();LED2_OFF();
DelayMs(time);
LED1_OFF();LED2_ON();
DelayMs(time);
}
FL_GPIO_SetOutputPin(LED1_GPIO, LED1_PIN);
FL_GPIO_SetOutputPin(LED2_GPIO, LED2_PIN);
}</code></pre>
<p> </p>
<p>按键1和按键4与MCU直连,2、3短接使用</p>
<p>KEY1----->PA10</p>
<p>KEY2----->PB12(J40跳冒短接使用)</p>
<p>KEY3----->PD11(J41跳冒短接使用)</p>
<p>KEY4----->PC6</p>
<p>key.h</p>
<pre>
<code class="language-cpp">#ifndef __KEY_H__
#define __KEY_H__
#include "main.h"
#define KEY1_GPIO GPIOA
#define KEY1_PIN FL_GPIO_PIN_10
#define KEY2_GPIO GPIOB
#define KEY2_PIN FL_GPIO_PIN_12
#define KEY3_GPIO GPIOD
#define KEY3_PIN FL_GPIO_PIN_11
#define KEY4_GPIO GPIOC
#define KEY4_PIN FL_GPIO_PIN_6
#define KEY1_State FL_GPIO_GetInputPin(KEY1_GPIO,KEY1_PIN)
#define KEY2_State FL_GPIO_GetInputPin(KEY2_GPIO,KEY2_PIN)
#define KEY3_State FL_GPIO_GetInputPin(KEY3_GPIO,KEY3_PIN)
#define KEY4_State FL_GPIO_GetInputPin(KEY4_GPIO,KEY4_PIN)
#define KEY1_PRES1 //KEY1按下
#define KEY2_PRES2 //KEY2按下
#define KEY3_PRES3 //KEY3按下
#define KEY4_PRES4 //KEY4按下
void KEY_Init(void);
uint8_t KEY_Scan(uint8_t);
#endif</code></pre>
<p>key.c</p>
<pre>
<code class="language-cpp">#include "key.h"
#include "user_init.h"
void KEY_Init(void)
{
FL_GPIO_InitTypeDef GPIO_InitStruct;// = {0};
FL_GPIO_SetOutputPin(GPIOA, FL_GPIO_PIN_10);
FL_GPIO_SetOutputPin(GPIOC, FL_GPIO_PIN_6);
GPIO_InitStruct.pin = KEY1_PIN|KEY4_PIN;
GPIO_InitStruct.mode = FL_GPIO_MODE_INPUT;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.pull = DISABLE;
GPIO_InitStruct.remapPin = DISABLE;
FL_GPIO_Init(KEY1_GPIO, &GPIO_InitStruct);
FL_GPIO_Init(KEY4_GPIO, &GPIO_InitStruct);
}
uint8_t KEY_Scan(uint8_t mode)
{
if((KEY1_State==0||KEY4_State==0))
{
DelayMs(100);
if(KEY1_State==0)return KEY1_PRES;
else if(KEY4_State==0)return KEY4_PRES;
}
return 0;
}</code></pre>
<p>main.c</p>
<pre>
<code class="language-cpp">#include "main.h"
#include "adc.h"
#include "led.h"
#include "key.h"
floatGetT;
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
uint8_t key=0;
/* SHOULD BE KEPT!!! */
MF_Clock_Init();
/* Configure the system clock */
/* SHOULD BE KEPT!!! */
MF_SystemClock_Config();
/* user init */
UserInit();
/* Initialize all configured peripherals */
/* SHOULD BE KEPT!!! */
MF_Config_Init();
My_LEDInit();
DelayMs(1000);
//LED_Blink(5,500);
KEY_Init(); //初始化按键
while(1)
{
key=KEY_Scan(1); //得到键值
if(key)
{
switch(key)
{
case KEY1_PRES: //控制key1
LED1_ON();LED2_ON();break;
case KEY4_PRES: //控制key4
LED1_OFF();LED2_OFF();LED3_TOG();LED4_TOG();break;
};
}
DelayMs(10);
}
}
</code></pre>
<p><br />
</p>
<p>个人使用的一些感觉:</p>
<p>1.感觉FM应该正在建自己的库函数和相关的库函数使用手册,那样用户上手会更容易,期待手册早日发布;</p>
<p>2.下版demo可以考虑把5V的供电口换个常用的USB口,供电会更方便点,像现在这样,不焊接留用也行,到时候可以自己加上<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/loveliness.gif" width="48" />;</p>
<p>3.板子很不错,未完待续···</p>
<p>求教!!!</p>
<p>为什么我按您的程序烧录好之后,开发板上的四个小灯就一直亮不灭,按键也不好使。</p>
快乐的炳 发表于 2021-10-10 14:55
求教!!!
为什么我按您的程序烧录好之后,开发板上的四个小灯就一直亮不灭,按键也不好使。
<p>再检查一下IO驱动函数配置有没有问题,按键只用了KEY1和KEY4;</p>
<p>下面这个链接里面有部分外设配好的工程代码,可以参考:</p>
<p><a href="https://bbs.eeworld.com.cn/thread-1160486-1-1.html">【复旦微FM33LC046N评测】+ 部分外设的使用 - 国产芯片交流 - 电子工程世界-论坛 (eeworld.com.cn)</a></p>
chrisrh 发表于 2021-10-11 08:37
再检查一下IO驱动函数配置有没有问题,按键只用了KEY1和KEY4;
下面这个链接里面有部分外设配好的工程 ...
<p>还是没整明白,要不您加我个QQ吧(QQ:1269909129),我详细请教请教,感谢大哥!</p>
页:
[1]