stm32

STM32 串口通信基础知识

陌路散爱 提交于 2019-12-16 12:39:41
1、串口通信简介 通信接口的两种方式: 并行通信 -传输原理:数据各个位同时传输。 -优点:速度快 -缺点:占用引脚资源多 串行通信 -传输原理:数据按位顺序传输。 -优点:占用引脚资源少 -缺点:速度相对较慢 目前使用最多的还是串行通信,即便速度相对较慢,所以下面都是讲解串行通信。 ①串口通信分类: 串口通信按照数据传送方向,分为: (1)单工:数据传输只支持数据在一个方向上传输 (2)半双工:允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信 (3)全双工:允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力 ②STM32的串行通信的方式 同步通信:带时钟同步信号传输。 异步通信:不带时钟同步信号。 注意:一般所说的串口是USART(通用同步异步收发器),同步异步都支持的。STM32F10x系列芯片,包含3个USART和2个UART 2、STM32的串口通信原理 串口通信是单片机最基本的功能,很多传感器模块与单片机的连接都会用到串口功能。串口通信,顾名思义就是将一整条的内容,切成一“串”个体来发送或接收。发送的核心思想是:将字符串中的一个字符写到一个寄存器中(此寄存器只能存一个字符),写入后会自动通过串口发送,发送结束再写入下一个字符

ST MCU的UID

浪子不回头ぞ 提交于 2019-12-16 10:55:33
ST MCU芯片中的绝大部分都内置一串96位唯一标识码【unique ID】 上面说了ST MCU芯片中的绝大部分都带UID,也就是说并非所有ST MCU芯片都带它。到底谁带谁不带,从各自芯片数据手册的首页即可确认。如果首页没有明确写明,就表示该芯片没有UID或者说即使相应地址有数据但不保证其唯一性。 比方在STM8系列中,STM8S0XX、STM8L0XX系列芯片就不带UID的。 在STM32家族中,STM32F0系列中的STM3F030子系列、STM32F070子系列也是不带UID的【如果此处说错,遵照数据手册所言】,而STM32F042、STM32F071、STM32F031、STM32F051等是带UID的。这点也不用太花心思记它,知道去芯片数据手册首页核查就好。 该UID对用户来讲是只读的,在一些对数据具有唯一性要求、数据加密操作等场合可以派上用场。ST MCU芯片中的这个UID 是对整串92位数据保证唯一性,如果你截取其中一部分就不保证唯一性了。 STM32芯片UID的详细描述是在各系列的参考手册里。比方,STM32F0系列UID介绍如下。 大致内容就是芯片WAFER的坐标信息、编号信息、产品批号信息等多个数据组合在一起的。关于UID的描述,在STM8数据手册里描述更为直观点,截图如下: 至于对该UID数据的读取,没啥特别的。先从ST

stm32专题三十九:HAL库 DHT11 驱动

一曲冷凌霜 提交于 2019-12-16 07:14:04
DHT11是很常用的温湿度传感器,时序也比较简单,如下所示: 直接给出HAL库的驱动: 1 微秒级延时函数 HAL库并没有直接的微秒级延时函数,下面是自己实现的微秒堵塞延时函数(使用定时器TIM3); /** * @brief 微秒级延时 */ void bsp_delay_us(uint16_t us) { __HAL_TIM_SET_COUNTER(&htim3, 0); HAL_TIM_Base_Start(&htim3); while (__HAL_TIM_GET_COUNTER(&htim3) != us); HAL_TIM_Base_Stop(&htim3); } 2 配置DHT11数据引脚的输出模式和输入模式; /** * @brief DHT11 输出模式 */ static void DHT11_Mode_OUT_PP(void) { GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = BSP_DHT11_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(BSP_DHT11_PORT, &GPIO_InitStruct); } /** *

STM32内存区分配学习

六月ゝ 毕业季﹏ 提交于 2019-12-15 19:36:28
程序 # define PI 3.1415926 //宏定义不占用内存 int num; //全局变量存放在内存的变量区; char * str = NULL ; //全局变量存放在内存的变量区; int main ( ) { int time ; //存在内存的栈区 char a = 1 来源: CSDN 作者: adam1991 链接: https://blog.csdn.net/u010970670/article/details/103551093

STM32 中断优先级设置或配置

☆樱花仙子☆ 提交于 2019-12-15 13:14:56
STM32F103XXX 中断优先级设置或配置 STM32 中断系统系统是非常复杂的。如果是搞不清楚计算机底层硬件或计算机工作原理的人,是很难搞懂中断系统。作为普通程序员只要会使用也未尝不可呀!我认为会使用就很好了,因为越是底层东西厂商也不需要用户去深入去理解,会用行就行。 STM32F103XXX系列的中断有如下几个问题你搞明白了,就很容易使用它了。 中断分组NVIC_PriorityGroup:既然要分组,你就会问STM32F103XXX系列能分几组?能分五组。它的组号是从零开始的。不同的组号还有老大、老二、老三、老四、老五区分。组0号是老大,组4号是老五。中间就是老二 老三 老四。注意没有组 5号的存在。在STM32库函数里它们都有自己的英文名字。 老大的英文名称:NVIC_PriorityGroup_0 老二的英文名称:NVIC_PriorityGroup_1 老三的英文名称:NVIC_PriorityGroup_2 老四的英文名称:NVIC_PriorityGroup_3 老五的英文名称:NVIC_PriorityGroup_4 *STM32F103XXX中有两个优先级的概念:抢占优先级和响应优先级,也有把响应优先级称作“亚优先级”或“副优先级,每个中断源都需要被指定这两种优先级,在STM32库函数里它们都有自己的名字* 抢占优先级英文名称

2019-12-15 stm32项目

我是研究僧i 提交于 2019-12-15 12:06:01
stm32项目: 硬件平台: 华清远见stm32开发板,pc电脑,jlink调试 软件 : keil5 ,c语言 时间: 2019年12月19-12月23日 基本功能: 1.下位机完成温湿度采集,led灯控制,蜂鸣器控制 2.下位机能上报(给上位机)当前温度值,湿度值 3.(上位机)能设置温度阈值(上限和下限),湿度阈值(上限和下限),led灯亮度(0-100),蜂鸣器响和关闭 4.下位机能根据阈值自动做出相关的灯光报警(温湿度使用不同的灯光或声音) 可选扩展功能: 5.能记忆温湿度阈值(掉电数据不丢失),下次上电重启之后能按该阈值进行自动警报。 6.温度上报功能,可以设置为单次上报(上位机请求一次,上报一次),定时汇报(定时时间可设置,最小单位1s,即每1s自动上报一次数据)开启或关闭 7.双机通信,两个开发板之间相互传递数据(温度值,湿度值)。(uart或者wifi) 8.双机通信,开发板A的上位机可以发送指令控制B开发板的温度阈值和湿度阈值,反之B的上位机也可以控制A开发板(基本功能必须正常有效) 9.上位机图形界面开发。 注: 上位机指的是pc电脑,pc电脑的控制可以是命令行,或者图形界面(qt) 下位机指的是stm32开发板 基本功能:必须完成 可选功能:部分能力较强的同学完成。 请大家根据项目的要求,做好项目进度计划(18号下午8点30之前提交)

STM32 USB设备描述符、配置描述符、端点描述符含义

梦想的初衷 提交于 2019-12-15 02:56:36
转载: https://www.cnblogs.com/huanjun/p/9605872.html /* USB设备描述符*/ const uint8_t CustomHID_DeviceDescriptor[CUSTOMHID_SIZ_DEVICE_DESC] = { 0x12, /*bLength 描述符的长度*/ USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType 描述符的类型(设备描述符为0x01)*/ 0x00, /*bcdUSB USB协议的版本*/ 0x02, 0x00, /*bDeviceClass 类代码*/ 0x00, /*bDeviceSubClass 子类代码*/ 0x00, /*bDeviceProtocol 设备所使用的协议*/ 0x40, /*bMaxPacketSize 端点0的最大包长*/ /*idVendor 厂商ID*/ LOBYTE(USB_VID), HIBYTE(USB_VID), /*idProduct 设备ID*/ LOBYTE(USB_PID), HIBYTE(USB_PID), 0x00, /*bcdDevice rel 设备版本号*/ 0x02, 1, /*描述生产厂家的字符串描述符的索引*/ 2, /*描述产品的字符串描述符的索引*/ 3, /*产品序列号的字符串描述符的索引*/

stm32对HAL库的DAC使用

a 夏天 提交于 2019-12-14 09:48:52
在cubemx中的设置。 默认即可。 在main中添加代码。 HAL_DAC_SetValue(&hdac, DAC_CHANNEL_2, DAC_ALIGN_12B_R, 2048); 在main()函数中添加程序设置DAC输出的数据为12位右对齐,数值为2048.则实际输出的电压为 2048/4096x3.3V=1.65V,使能ADC通道2开始转换。 然后开启dac。 HAL_DAC_Start(&hdac, DAC_CHANNEL_2); 即可。 来源: https://www.cnblogs.com/zjx123/p/12038164.html

STM32 GPIO口的配置和应用

*爱你&永不变心* 提交于 2019-12-14 09:33:31
STM32F103ZET6 一共有7组IO口(有FT的标识是可以识别5v的) 每组IO口有16个IO 一共16*7=112个IO 4种输入模式: (1) GPIO_Mode_AIN 模拟输入 (2) GPIO_Mode_IN_FLOATING 浮空输入 (3) GPIO_Mode_IPD 下拉输入 (4) GPIO_Mode_IPU 上拉输入 4种输出模式: (5) GPIO_Mode_Out_OD 开漏输出 (6) GPIO_Mode_Out_PP 推挽输出 (7) GPIO_Mode_AF_OD 复用开漏输出 (8) GPIO_Mode_AF_PP 复用推挽输出 四种输入模式: 1、一图记住上拉、下拉、浮空输入模式: 原理分析:图中箭头表示信号流动方向。从I/O引脚向左沿着箭头方向,首先遇到两个开关和电阻,与VDD相连的称为上拉电阻,与Vss相连的称为下拉电阻,再连接到施密特触发器(信号转换)把电压信号转化为0、1的数字信号,存储在输入数据寄存器(IDR)。然后通过设置配置寄存器(CRL、CRH)控制这两个开关,于是就可以得到GPIO的上拉输入、下拉输入模式和浮空输入模式,浮空就是既不接上拉也不接下拉。在上拉/下拉/浮空输入模式中,输出缓冲器被禁止(P-MOS和N-MOS),施密特触发器输入被激活,根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接

Understanding the CAN filters

帅比萌擦擦* 提交于 2019-12-14 04:09:00
问题 I am unable to understand the CAN filter configuration for the stm32f4-discovery. CAN_FilterInitStructure.CAN_FilterNumber = 0; CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask; CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit; CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000; CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000; CAN_FilterInitStructure.CAN