stm32编程初始化设备步骤
1.使用LED
使用GPIO 、锁存器
步骤:
1.开启时钟
2.初始化GPIO结构体(包括8个LED和锁存器)PC8~PC15、PD2
(模式:GPIO_Mode_Out_PP 推挽输出)
3.写一个控制LED的函数
因为LED和LCD公用GPIO,因此如果每次写入的是某一个GPIO的位,其他LED可能会在锁存器打开时因改变了LCD的值使LED也发生改变,因此,每一次改变LED的亮灭,应设置所有的GPIO。通过调用函数 LED_Lit(uint8_t led) 实现。
void LED_Lit(uint8_t led)
{GPIO_Write(GPIOC,led<<8);GPIO_SetBits(GPIOD,GPIO_Pin_2);GPIO_ResetBits(GPIOD,GPIO_Pin_2);
}
4.定义一个LED的全局变量
因此控制LED的应该是一个全局变量,在改变LED时改变这个全局变量的相应位即可。
2.使用按键
控制按键一般是使用轮询或中断,由于轮询需要写按键扫描函数,所以这里介绍中断方式
使用GPIO 、EXTI、NVIC
步骤:
1.开启时钟(GPIOA、GPIOB、AFIO)
2.初始化GPIO结构体(4个按键)PA0、PA8、PB、PB2
(模式:GPIO_Mode_IPU 上拉输入)
3.初始化NVIC结构体
初始化NVIC就是在配置优先级
4.初始化EXTI结构体
需要使用"stm32f10x_gpio.h"中的函数GPIO_EXTILineConfig(GPIO_PortSourceGPIOA , GPIO_PinSource8);来配置每一个EXTI对应的GPIO引脚。
5.写中断服务函数
一般步骤是先判断是否有EXTI_Linex的中断发生;如果有,先延时20ms,然后进行操作,一般中断服务函数里不做太多的操作,都是修改相应的标志,然后在主函数里根据标志位进行操作;最后清除标志位。
3.使用UART
串行输入输出使用的是uart2(PA3–RXD,PA2–TXD),且最好也是使用中断方式进行判断。
使用GPIO 、NVIC、
步骤:
1.开启时钟(GPIOA)
2.初始化GPIO结构体PA2、PA3
(PA3模式:GPIO_Mode_IN_FLOATING 浮空输入)因为这里是接受字符,字符是0、1序列,所以应该是输入什么就接受什么,所以是浮空输入。
(PA2模式:GPIO_Mode_AF_PP 复用推挽输出)
3.初始化NVIC结构体
初始化NVIC就是在配置优先级
4.其他函数的调用
USART_Cmd(USART2,ENABLE);//打开uart
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//配置中断是 接受队列不为空时产生中断
(显然,当发送数据时是不需要中断的,直接发送出去即可。
只有在接受数据时,当计算机发送数据到开发板,开发板需要检测是否有数据接受。)
发送数据到计算机需要使用函数printf();将printf中调用的fputc()进行修改,则每次调用printf()即向计算机发送一次数据。
int fputc(int ch,FILE* file)
{USART_SendData(USART2,ch);while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);return ch;
}
5.中断处理函数(应该是接受数据时中断)
同样的,首先判断标志位USART_IT_RXNE是否发生;如果是,那么调用固件库函数USART_ReceiveData(USART2);接受一个字符,然后进行相应操作即可;最后清除标志位
4.使用EEPROM存储
使用GPIO 、I²C
(需要使用的函数考试时已经给出,直接调用即可,只需要写出俩个函数:写入EEPROM、读取EEPROM)
步骤:
写入EEPROM、读取EEPROM的函数
uint8_t EEPROM_Read(uint8_t adds)
{uint8_t data;I2CStart();I2CSendByte(0xa0);I2CWaitAck();I2CSendByte(adds);I2CWaitAck();I2CStart();I2CSendByte(0xa1);I2CWaitAck();data=I2CReceiveByte();I2CWaitAck();I2CStop();return data;}
void EEPROM_Write(uint8_t adds,uint8_t data)
{I2CStart();I2CSendByte(0xa0);I2CWaitAck();I2CSendByte(adds);I2CWaitAck();I2CSendByte(data);I2CWaitAck();I2CStop();
}
5.使用模拟输入ADC
(R37是PB0引脚 ,属于ADC,因此是模拟信号(模拟输入),且R37使用的是ADC1)
使用GPIO 、ADC、NVIC
步骤:
1.开启时钟(GPIOB、ADC1)
2.初始化GPIO结构体 PB0
(PA2模式:GPIO_Mode_AIN 模拟输入)
3.初始化NVIC结构体
即配置中断优先级
4.初始化ADC结构体
需要注意的有:
ADC_InitStruct.ADC_Mode=ADC_Mode_Independent; //独立ADC
ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//不使用外部触发
5.其他函数调用
RCC_ADCCLKConfig(RCC_PCLK2_Div8); //配置ADC时钟(只有这一个需要去"stm32f10x_rcc.h"里面找)ADC_Cmd(ADC1,ENABLE);//打开ADC
ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE); //中断配置ADC_ResetCalibration(ADC1);//校准ADC
ADC_StartCalibration(ADC1);//校准ADC
while(ADC_GetCalibrationStatus(ADC1));//等待ADC校准完毕ADC_SoftwareStartConvCmd(ADC1,ENABLE);//软件触发
ADC_RegularChannelConfig(ADC1,ADC_Channel_8,1,ADC_SampleTime_13Cycles5);//规则通道配置
6.写中断服务函数
同样的,首先判断标志位ADC_IT_EOC是否发生;如果是,那么调用固件库函数ADC_GetConversionValue(ADC_TypeDef* ADCx);
接受ADC的值,然后进行相应操作即可;最后清除标志位
6.使用PWM输出
(PWM输出是TIM的一种使用。STM32S103RBT6开发板只有TIM1/2/3/4。其中,TIM1是高级定时器,其他是通用定时器。通过查stm32f103rbt6.pdf手册,找出题目中对应GPIO引脚使用的是哪一个TIM
每一个TIM有4个通道,根据GPIO判断使用的是哪一个通道
如:PA4使用的是TIM3——CN1)
使用GPIO 、TIM
步骤:
1.开启时钟(GPIOA、AFIO、TIM1/2/3/4)
2.初始化GPIO结构体
(模式:GPIO_Mode_AF_PP 复用推挽输出)
3.初始化时基结构体(TIM_TimeBaseInitTypeDef)
TIM_TimeBaseInitStruct.TIM_Prescaler=71;//分频系数,使定时器频率为72/(71+1)=1MHz。
TIM_TimeBaseInitStruct.TIM_Period=999;//周期,即重装载值设置为1000,则可以定时1ms
4.初始化输出比较结构体(TIM_OCInitTypeDef)
特别的:
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
5.其他的函数调用
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);//TIM预分频配置
TIM_Cmd(TIM3,ENABLE); //打开相应的TIM
7.使用LCD
同IIC,直接使用比赛时提供的函数进行调用。
8.系统时钟Systick
调用函数SysTick_Config(SystemCoreClock/1000);配置系统时钟为1ms中断一次
然后写相应的延时函数即可
9.蜂鸣器
使用GPIO
步骤:
1.开启时钟(GPIOB、AFIO)
2.初始化GPIO结构体 PB4
(模式 :GPIO_Mode_Out_PP 推挽输出)
3.其他函数调用
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);//配置引脚映射(禁止JTRST)
stm32编程初始化设备步骤相关推荐
- STM32配置组合设备(HID+CDC)
STM32组合设备 STM32配置组合设备(HID+CDC) 1. CDC基础工程,HID基础工程生成 2.USB工程熟悉 2.1 USB初始化 2.2USB中断 2.3 相关结构体 2.3.1 ` ...
- 【嵌入式07】寄存器映射原理详解,GPIO端口的初始化设置步骤
本文主要介绍STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化设置步骤. 一.STM32F103系列芯片的地址映射和寄存器映射原理 1.什么是寄存器? 2.地址映射和寄存器映射 ...
- 欧姆龙变频器MX2参数_第442期丨【源程序】基于三菱西门子欧姆龙松下PLC实现喷水池控制系统;欧姆龙PLC编程软件更新步骤...
论坛周刊 1 Dec 2019 本期论坛周刊精彩内容: 1.[源程序]基于三菱\西门子\欧姆龙\松下PLC实现喷水池控制系统 2.欧姆龙PLC编程软件更新步骤 3.RSLinx Classic Ent ...
- 基于标准库函数与基于HAL库函数的stm32编程方式
文章目录 基于标准库函数与基于HAL库函数的stm32编程方式 一.基于标准库 1. 介绍 2. 库函数的STM32串口程序编写 二.基于HAL库 1.介绍 2.HAL库STM32串口程序编写 三.差 ...
- 基于标准库函数与基于HAL库函数的stm32编程方式对比
基于标准库函数与基于HAL库函数的stm32编程方式对比 一.标准库函数 二.HAL库函数 三.差异 四.stdunio IDE试玩 参考资料 一.标准库函数 1.标准库的解释 标准外设库(Stand ...
- USB学习笔记(5)STM32 USB库移植步骤
USB学习笔记(5)STM32 USB库移植步骤 本文是将官网的USB驱动库文件移植到自己的工程里面,实现USB功能的具体移植步骤说明,实现Custom_HID功能. 1.先准备一个工程模板 获取工程 ...
- 零基础入门STM32编程(三)
前情回顾 通过前面两篇文章的学习,我们已经对STM32有了一定的了解,知道了STM32单片机的基本分类和不同产品间的特点等知识,今天起围绕STM32F103xx继续深入浅出地学习单片机编程. 一.总线 ...
- 标准K-means算法的缺陷、K-mean++初始化算法、初始化算法步骤、Kmeans++算法实现
标准K-means算法的缺陷.K-mean++初始化算法.初始化算法步骤.Kmeans++算法实现 目录 标准K-means算法的缺陷.K-mean&
- Python gui编程pyQt5安装步骤
Python gui编程pyQt5安装步骤 =============================== -m PyQt5.uic.pyuic $FileName$ -o $FileNameWit ...
- Redis一个命令请求从发送到完成的步骤以及初始化服务器步骤
一个命令请求从发送到完成的步骤 如下: 1.客户端将命令请求发送给服务器 当用户在客户端中键入一个命令请求时,客户端会将这个命令请求转换成协议格式,然后通过连接到服务器的套接字,将协议格式的命令请求发 ...
最新文章
- R语言使用ggplot2包使用geom_boxplot函数绘制基础分组水平箱图(boxplot)实战
- php云人才系统调用,PHP云人才系统3.0正式发布
- mysql的编译_Mysql编译安装
- Spring Boot 微信点餐开源系统
- 1到100的素数(java)
- flink sql client读取hive时卡住
- Java中的Error和Exceptiond的异同点
- 十大经典排序算法1(Python版本)
- 第 180 章 IBM WebSphere
- 2021年最好用的5个股票API
- 实验一 SNMP网络管理架构的验证
- 数据库 求闭包、求候选码、范式转换、最小依赖集、无损分解及保持函数依赖
- python逐行读取xls文件
- Word编辑页码不从第一页开始
- 关于10进制转2进制的C语言代码
- 高级前端工程师和低级前端工程师的区别
- win系统C++的udp通信(接收并发送)详细教程、win下inet_pton和inet_ntop无法使用解决方法
- C51单片机与PCF8591模块的交互:C语言源码解析
- 自动化运维-Ansible(redhat 8)
- linux 关闭sendmail