完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
前言:
2、浮空输入:输入信号为数字信号。数字信号直接跳过上下拉电阻,直接输入到IO逻辑电路。 3、下拉输入:输入信号为数字信号。由弱下拉电阻保持该引脚的电平为低电平。 4、上拉输入:输入信号为数字信号。 5、推挽输出:输出信号为数字信号。不仅能输出高低电平的信号,还有驱动电流的能力 6、开漏输出:输出信号为数字信号。不能驱动元器件,只是输出给外部一个1/0的高低电平信号。 7、复用推挽输出/复用开漏输出:在复用模式下使用,使用方法和上面一样。 一、跑马灯 1.使能IO口时钟。调用函数RCC_APB2PeriphColckCmd(); 不同的IO组,调用的时钟使能函数不一样。 2.初始化IO口模式。调用函数GPIO_Init(); void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能PB、PE时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //PB.5端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHZ GPIO_Init(GPIOB, &GPIO_InitStructure); //对PB.5进行初始化 GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5输出高 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //PE.5端口配置 GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_SetBits(GPIOE,GPIO_Pin_5); } 3.操作IO口,输出高低电平。 GPIO_SetBits(); GPIO_ResetBits(); 位操作 : 把一个比特膨胀为32位的字(每个比特对应一个地址) 二、蜂鸣器
2.初始化IO口模式。调用函数BEEP_Init(); void BEEP_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIOB端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //PB.8端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度设置为50MHz GPIO_Init(GPIOB, &GPIO_InitStructure); //根据参数初始化GPIOB.8 GPIO_ResetBits(GPIOB,GPIO_Pin_8);//输出为0,关闭蜂鸣器 } 3.操作IO口,输出高低电平。 三、案件输出 1.使能按键对应IO口时钟。调用函数: RCC_APB2PeriphClockCmd(); 2.初始化IO模式:上拉/下拉输入。调用函数:GPIO_Init(); void KEY_Init(void) //IO口按键初始化 { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE); //使能PORTA、PORTE时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;//KEY0-KEY2 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置上拉输出 GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE2,3,4 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(GPIOA, &GPIO_InitStructure); } 3.扫描IO口电平(库函数/寄存器/位操作)。 四、时钟系统 启动文件中定义 先启动systeminit 然后调用main函数 五、滴答计时器
六、中断管理办法 系统代码执行过程中,仅设置一次中断优先级分组(避免中断混乱) 中断分为0~4组 每个中断设置 一个抢占优先级+一个相应优先级 七、串口通信 处理器与外部的通信方式
USART - 通用同步异步收发器 串口异步通信参数:
1.串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd(); 2.串口复位:USART_DeInit(); 这一步不是必须的 3.GPIO端口模式设置:GPIO_Init(); 串口参数初始化: 4.USART_Init(); 5.开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤) NVIC_Init(); USART_ITConfig(); 6.使能串口:USART_Cmd(); 7.编写中断处理函数:USARTx_IRQHandler(); 8.串口数据收发: void USART_SendData();//发送数据到串口,DR uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据 9.串口传输状态获取: FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT); |
|
|
|
只有小组成员才能发言,加入小组>>
3280 浏览 9 评论
2958 浏览 16 评论
3460 浏览 1 评论
9005 浏览 16 评论
4052 浏览 18 评论
1117浏览 3评论
574浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
571浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2304浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1860浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 12:08 , Processed in 1.111297 second(s), Total 81, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号