![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
单片机
文章平均质量分 70
主要是单片机的实验总结
你走以后
好好学习
展开
-
基于stm32F4探索者,通过RS485通信模块读取红外测温仪的温度数据
RS485是一种串行通信协议,用于在多个设备之间进行数据通信。它定义了电气特性、信号线配置和通信协议,使得多个设备能够通过一对差分信号线进行全双工通信。特别适用于长距离通信和多设备连接的应用。1.差分信号:RS485使用两根信号线(A和B)来传输数据,其中一个为正向传输,另一个为反向传输。这种差分信号传输方式使其具有较强的抗干扰能力,适合在噪声较高的工业环境中使用。2.多点通信:RS485支持多点通信,即多个设备可以连接在同一条信号线上,实现全双工通信。原创 2023-07-21 15:56:37 · 1926 阅读 · 3 评论 -
使用stm32CubeMX生成hal库代码——点亮LED灯
编译代码时遇到问题,查阅资料,发现是没有启动文件,这里在其他的源码文件中复制一个startup_stm32f407xx.s文件,然后添加到现有工程中,如下所示。原创 2023-05-31 11:33:14 · 1448 阅读 · 0 评论 -
卸载旧版本Keil,安装新版本的注意事项以及安装完成以后的一些问题
但是点上面的Device Connect,没有反应,有这个提示ST LINK is not in the DFU mode plesse restart it,在网上查找解决办法,有的说要重新下载st link utility工具,再升级,这里没有重新下载,关闭keil,拔掉下载器,重新打开keil,再插上下载器,ST-LINK->Firmware update->device connect,就能更新了,最后成功把程序烧到开发板。原创 2023-05-25 12:35:07 · 6353 阅读 · 3 评论 -
串口通信——stm32F407实现串口发送坐标,输出x坐标和y坐标
在数据的类型上,x和y的坐标值类型是 int16_t ,就是有正负号,写程序是开始写成uint16_t,导致输出负数错误。原创 2023-04-20 09:29:17 · 2068 阅读 · 2 评论 -
用正点原子的板子(STM32F4探索者)做DAC 实验
软件触发模式,指的是向软件触发寄存器SWTRIGR中写入命令时触发转换,也就是将DOR寄存器中的数据进行转换;使用STM32F4内部 DAC1来输出电压,通过 ADC1的通道5采集DAC的输出电压,并通过串口打印电压值。该函数就是把想输出的电压值换算成对应DAC的输入值,这里value值就是期望的电压值,这里做了10倍处理。使用跳线帽把DAC和ADC的引脚连起来,这里把想输出的电压值设置为1v,2v,3v,观察串口输出的结果。这里使用的是不使用触发。这里使用DAC的通道1,其对应的引脚是PA4。原创 2023-03-22 16:54:00 · 2127 阅读 · 0 评论 -
看野火的视频,用正点原子的板子(STM32F4探索者)做SPI实验
由上面的时序图可以看出,先要发送一个0X90,再发送一个任意字节,再发送一个任意字节,再发送一个0X00,然后接收字节是制造商ID,再接收字节是设备ID。可以看到前20个字节的数据内容是0X9,后面的字节内容都是0XFF,证明写入和读取数据正确。发送0X02,发送扇区地址,分三次发送扇区地址,发送内容字节,进行数据存储。发送0X03,发送扇区地址,分三次发送扇区地址,发送任意字节,返回数据。发送0X05,等待返回的值是否为0,这是为1就是忙碌,0就是不忙碌。发送0X20,发送扇区地址,分三次发送扇区地址。原创 2023-02-27 14:12:40 · 1741 阅读 · 0 评论 -
看野火的视频,用正点原子的板子(STM32F4探索者)做按键检测实验
这里以按键KEY0为例,端口就是GPIOE,引脚就是pin4。原创 2022-12-18 15:44:19 · 459 阅读 · 0 评论 -
串口通信——发送和接收数据(8位和16位数据之间的转换)
在编写接收数据中断函数时,如果使用printf进行接收数据的打印时候,只会打印接收到的第一个字节,这里是把printf放到接收和空闲中断之间,会产生问题。//接收数据中断函数 void USART1_IRQHandler(void) {uint8_t i;//每当接收到1个字节,会产生USART_IT_RXNE中断 rx_buff [ rx_cnt ] = USART_ReceiveData(USART1);//把这个数据放到数组中去 rx_cnt ++;原创 2023-01-27 23:54:03 · 13410 阅读 · 0 评论 -
看野火的视频,用正点原子的板子(STM32F4探索者)做外部中断实验(按下按键反转一次灯的亮灭)
按下按键KEY0,灯LED1亮,再按一下按键KEY0,灯LED1灭。这里的KEY0的端口是GPIOE,引脚就是PIN4。LED1的端口是GPIOF,引脚是PIN10。原创 2022-12-21 16:02:49 · 1065 阅读 · 0 评论 -
看野火的视频,用正点原子的板子(STM32F4探索者)做DMA实验
关于存储器到外设的数据传输:就是把一个数据中的数据通过DMA传输到串口的数据寄存器中(USART_DR),串口把数据发送出来,通过串口助手展示。关于存储器到存储器的数据传输实验: 就是把一个数组的数据通过DMA复制到另一个数组中去。这里使用的是DMA2_Stream7,通道4,串口是USART1。使用DMA完成存储器到存储器的数据传输和存储器到外设的数据传输;实验1结果如下图所示,可以看到数据传送成功。实验2结果如下图所示,可以看到数据传送成功。原创 2023-03-10 17:17:34 · 1320 阅读 · 0 评论 -
看野火的视频,用正点原子的板子(STM32F4探索者)做输入捕获(脉宽测量)实验
如图所示,WK_UP是与引脚PA0相连接的,正常情况下,未按下KEY_UP键,PA0是低电平,按下按键是高电平,实验目标就是捕获高电平脉冲的时间(就是按键按下去的时间)。使用定时器TIM5 的通道 1(PA0)来做输入捕获实验,捕获 PA0 上高电平的脉宽(用 KEY_UP 按键输入高电平),最后通过串口打印高电平脉宽时间。Tclk:TIM5 的输入时钟频率(单位为 Mhz),这里TIM5的时钟频率为是84Mhz;如图所示,PA0引脚是通用定时器5的通道1。按下按键时间长短不同,捕获的时间不同。原创 2023-03-16 21:00:38 · 1701 阅读 · 0 评论 -
看野火的视频,用正点原子的板子(STM32F4探索者)做系统定时器实验
编写一个毫秒级的延时函数,控制LED的亮灭。这里的灯是LED1,端口是GPIOF,引脚是PIN10。原创 2022-12-21 23:39:47 · 747 阅读 · 0 评论 -
用STM32F4探索者做软件模拟IIC实验
通过软件模拟I2C,实现和24C02(EEPROM)之间的双向通信。初始化IIC;编写起始、停止、应答信号函数;编写向24C02指定地址写入数据函数;编写在24C02指定地址读取数据函数;编写main函数这里是使用GPIOB8,GPIOB9模拟IIC,GPIOB8对应的是IIC的SCL,GPIOB9对应的是IIC的SDA。如图所示,PB9对应的就是18位和第19位,00是输入模式,01是输出模式;两个位&(与运算),相同为本身,不同为0;两个位|(或运算),有1为1,两者0为0;&= ~(1原创 2023-03-07 14:40:55 · 1754 阅读 · 0 评论 -
串口通信——串口助手发送正数/负数(以ascii码的形式发送或者以16进制形式发送),最后展示出发送的数
先找规律,这里是假设发送的数字是-29987,函数中传入的值一个是数组,一个是数组的总索引值,这里取到的字节首先要减去0X30,得到这个数字是几,然后再乘以10的几次方,2在万位上,需要乘以10000,它的索引值对应的是1,传来的索引总数是6,所以乘的10次方应该是:10的次方数 = 6(总索引值) - 1(2所在的索引值) - 1;9在千位上,需要乘以1000,它的索引值对应的是2,传来的索引总数是5,所以乘的10次方应该是:10的次方数 = 5(总索引值) - 1(2所在的索引值) - 1;原创 2023-01-29 00:21:02 · 7930 阅读 · 0 评论 -
串口通信(stm32F4)——通过串口助手发送led on或者led off控制LED灯的亮灭
在编写接收数据中断函数时,如果使用printf进行接收数据的打印时候,只会打印接收到的第一个字节。//每当接收到1个字节,会产生USART_IT_RXNE中断 rx_buff [ rx_cnt ] = USART_ReceiveData(USART1);//把这个数据放到数组中去 //printf("value = %x\n",rx_buff[rx_cnt]);//加上这只会接收到第一个字节 //printf("value = %d\n",rx_cnt);rx_cnt ++;原创 2023-01-27 21:17:32 · 7529 阅读 · 1 评论 -
用正点原子的板子(STM32F4探索者)做PWM 输出实验
使用 TIM14 的通道 1 来产生 PWM 控制 LED0(DS0) 的亮度。由上图可以看出,GPIOF9引脚对应的是定时器TIM14的通道1。由上图可以看出,GPIOF9引脚对应的是LED0。原创 2023-03-17 00:00:54 · 1170 阅读 · 0 评论 -
用正点原子的板子(STM32F4探索者)做窗口看门狗(WWDG)实验
宏定义的时候,后面不要加封号,会报错!!!原创 2023-03-21 14:43:42 · 957 阅读 · 0 评论 -
看野火的视频,用正点原子的板子(STM32F4探索者)做ADC读取电压实验
将ADC配置连续模式,只需要在第一次转换时给触发信号,后面不需要再给。使用STM32F4的ADC1通道5(PA5)来采样外部电压值(这里采样两个电压值TPAD(3.3v),GND(0v)),最后通过串口打印电压值。这里是用于模拟电路的时钟,就是APB2的时钟,这里的时钟是84MHZ,PCLK2:APB2高速总线时钟。这里转换数据结束就会产生中断(使用的是规则通道,不是注入通道),然后进入中断中读取ADC采集到的值。这是ADC采集到的值转换成电压的公式,就是比例关系:3.3:4096 = x:采集到的数值。原创 2023-03-20 20:52:05 · 2505 阅读 · 0 评论 -
用正点原子的板子(STM32F4探索者)做独立看门狗(IWDG)实验
由于程序是由按键实验复制过来的,在没有把延时函数初始化的情况下,就使用了延时,导致程序就卡在了delay_ms(200)上,经过调试发现问题,加上初始化,最后解决了这个问题。//初始化延时函数 delay_ms(200);原创 2023-03-21 10:10:18 · 1092 阅读 · 1 评论 -
定时器控制LED灯的亮灭(每隔1s翻转一次灯的状态)
其中 #define GPIO_Pin_10 ((uint16_t)0x0400), 0000 0100 0000 0000就是第10位为1,GPIOF的ODR寄存器的初始值都是0,所以异或GPIO_Pin_10 就是把ODR寄存器的第10位置1,再置0这样进行反转。按照下面的设置:计数一次的时间是 (1000 * 84) / 84000000 = 1ms (后面计数1000次就是1s,所以就是LED经过1s亮灭一次)写一个1s的定时器,来控制LED灯的亮灭。编写LED.h函数;原创 2023-01-29 23:32:51 · 9307 阅读 · 0 评论 -
看野火的视频,用正点原子的板子(STM32F4探索者)点亮LED灯(寄存器操作)
寄存器点亮LED灯原创 2022-11-15 11:53:06 · 1274 阅读 · 0 评论