完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
任何一款单片机,最基本的操作就是通过改变或者获取IO的状态来表示。也就是说入手任何一款单片机 我们第一件是做的就是对IO进行一个初步的探讨。 先看IO输出。IO输出最直接表现的是LED显示。 由图我们可以得知,低电平点亮,高电平关闭。 我们来编写它的初始化程序。 头文件: #ifndef __LED__H__ #define __LED__H__ #include "main.h" #define LED_ON 1 #define LED_OFF 0 #define LED2_GPIO_PORT CW_GPIOA #define LED2_PIN GPIO_PIN_7 #define LED3_GPIO_PORT CW_GPIOA #define LED3_PIN GPIO_PIN_8 #define LED4_GPIO_PORT CW_GPIOC #define LED4_PIN GPIO_PIN_13 #define LED2_ON() GPIO_WritePin(LED2_GPIO_PORT, LED2_PIN,GPIO_Pin_RESET) #define LED2_OFF() GPIO_WritePin(LED2_GPIO_PORT, LED2_PIN,GPIO_Pin_SET) #define LED2_TOGGLE() GPIO_TogglePin(LED2_GPIO_PORT, LED2_PIN) #define LED3_ON() GPIO_WritePin(LED3_GPIO_PORT, LED3_PIN,GPIO_Pin_RESET) #define LED3_OFF() GPIO_WritePin(LED3_GPIO_PORT, LED3_PIN,GPIO_Pin_SET) #define LED3_TOGGLE() GPIO_TogglePin(LED3_GPIO_PORT, LED3_PIN) #define LED4_ON() GPIO_WritePin(LED4_GPIO_PORT, LED4_PIN,GPIO_Pin_RESET) #define LED4_OFF() GPIO_WritePin(LED4_GPIO_PORT, LED4_PIN,GPIO_Pin_SET) #define LED4_TOGGLE() GPIO_TogglePin(LED4_GPIO_PORT, LED4_PIN) extern void Led_Init( void ); extern void Led_Test( void ); #endif 驱动文件 #include "led.h" void Led_Init( void ) { GPIO_InitTypeDef GPIO_InitStruct; // RCC_HSI_Enable( RCC_HSIOSC_DIV6 ); __RCC_GPIOA_CLK_ENABLE(); __RCC_GPIOC_CLK_ENABLE(); GPIO_InitStruct.IT = GPIO_IT_NONE; // LED4 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pins = LED4_PIN; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_Init( LED4_GPIO_PORT, &GPIO_InitStruct ); GPIO_InitStruct.IT = GPIO_IT_NONE; // LED3 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pins = LED3_PIN; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_Init( LED3_GPIO_PORT, &GPIO_InitStruct ); GPIO_InitStruct.IT = GPIO_IT_NONE; // LED2 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pins = LED2_PIN; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_Init( LED2_GPIO_PORT, &GPIO_InitStruct ); LED4_OFF(); LED3_OFF(); LED2_OFF(); } void Led_Test( void ) { // LED4_TOGGLE(); // LED2_TOGGLE(); LED3_TOGGLE(); } 这样,我们完成了对LED灯的初始化配置。 然后,我们来看看IO的输入。最基本的体现是按键(实体按键)输入。 板载独立按键和矩阵键盘区,不过,矩阵键盘去只是2.54MM间距的接口,不方便我们操作。我们可以利用独立按键 来实现我们的想法。由图可知,按键闭合接地,因此我们要对其进行内部上拉。 我们来编写它的初始化程序。 按键驱动头文件: #ifndef __KEY__H__ #define __KEY__H__ #include "main.h" #define KEY1_GPIO_PORT CW_GPIOB #define KEY1_PIN GPIO_PIN_13 #define KEY2_GPIO_PORT CW_GPIOB #define KEY2_PIN GPIO_PIN_14 #define KEY3_GPIO_PORT CW_GPIOB #define KEY3_PIN GPIO_PIN_15 #define KEY1() GPIO_ReadPin(KEY1_GPIO_PORT, KEY1_PIN) #define KEY2() GPIO_ReadPin(KEY2_GPIO_PORT, KEY2_PIN) #define KEY3() GPIO_ReadPin(KEY3_GPIO_PORT, KEY3_PIN) extern void key_Init( void ); #endif 按键驱动文件: #include "key.h" void key_Init( void ) { GPIO_InitTypeDef GPIO_InitStruct; __RCC_GPIOB_CLK_ENABLE(); GPIO_InitStruct.IT = GPIO_IT_NONE; // KET1 GPIO_InitStruct.Mode = GPIO_MODE_INPUT_PULLUP; GPIO_InitStruct.Pins = KEY1_PIN; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_Init( KEY1_GPIO_PORT, &GPIO_InitStruct ); GPIO_InitStruct.IT = GPIO_IT_NONE; // KEY2 GPIO_InitStruct.Mode = GPIO_MODE_INPUT_PULLUP; GPIO_InitStruct.Pins = KEY2_PIN; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_Init( KEY2_GPIO_PORT, &GPIO_InitStruct ); GPIO_InitStruct.IT = GPIO_IT_NONE; // KEY2 GPIO_InitStruct.Mode = GPIO_MODE_INPUT_PULLUP; GPIO_InitStruct.Pins = KEY3_PIN; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_Init( KEY3_GPIO_PORT, &GPIO_InitStruct ); } 按照上面的配置,我们就完成了对IO的输入输出的初始化配置。然后,在main.c文件里面调用即可。 void initial_MCU( void ) { RCC_Configuration(); Led_Init(); key_Init(); } /************ ****************************************** * 函数名称:initial_peripheral * 函数功能:外部初始化函数 * 入口参数:void * 出口参数: *******************************************************/ void initial_Peripheral( void ) { ; } int main() { initial_MCU(); delay1ms( 10 ); initial_Peripheral(); delay1ms( 10 ); while( 1 ) // 以下主要测试参数配置 { // Led_Test(); // delay1ms( 100 ); if( KEY1() == GPIO_Pin_RESET ) { delay1ms( 10 ); if( KEY1() == GPIO_Pin_RESET ) { LED2_ON(); } } else { LED2_OFF(); } if( KEY2() == GPIO_Pin_RESET ) { delay1ms( 10 ); if( KEY2() == GPIO_Pin_RESET ) { LED3_ON(); } } else { LED3_OFF(); } if( KEY3() == GPIO_Pin_RESET ) { delay1ms( 10 ); if( KEY3() == GPIO_Pin_RESET ) { LED4_ON(); } } else { LED4_OFF(); } } } 我们编写了一个按键操作,LED同步显示的小程序。当然,你也可以按照配置LED的模式去配置蜂鸣器. |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
CW32L010安全低功耗MCU,树立M0+产品行业新标杆!
785 浏览 0 评论
892 浏览 0 评论
1331 浏览 0 评论
1224 浏览 0 评论
962 浏览 0 评论
2468浏览 1评论
1005浏览 1评论
【CW32饭盒派开发板试用体验】与CW32饭盒派的第一次亲密接触
382浏览 1评论
261浏览 0评论
398浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 09:25 , Processed in 0.606999 second(s), Total 62, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号