STM32的数据发送有两个中断标志,一个是发送数据寄存器空标志,一个是发送完毕标志。两个标志都可以引起中断.
要以中断的方式发送一个数据包,流程是这样的:
1.设置RS485的方向为发送,使能发送寄存器空中断,使能完毕进入串口中断。
2.串口中断里读取串口状态,并填充一个数据到发送数据寄存器,硬件自动清除发送数据寄存器空标志,串口数据发送开始。
3.串口发送完一个数据,发送数据寄存器变空,再进入中断,继续填充下一个数据,直到最后一个数据填充完, 使能串口
发送完毕中断。
4.最后一个数据发送完毕,再次进入中断, 清除发送数据寄存器空标志,清除发送完毕中断标志,清除这两个中断标志
的使能位,设置RS485的方向为接收.
注: 如果最后一个数据放入数据发送寄存器,就立刻设置RS485的方向为接收,对方将会丢失一个数据。发送完毕中断和
51单片机的TI标志功能是一样的。唯有发送寄存器空标志是51单片机所没有的,使用这个标志可保证发送数据波形的连续性,
减少空闲时间。
在连续的数据包发送时,先开启寄存器空中断,进入发送中断,在发送中断里填充数据到发送寄存器,最后一个数据填充完,开启发送完毕中断,最后一个数据发送完毕,再次进入中断,就可以控制RS485的方向为接收了.
关键字:STM32 中断式 发送特点 RS485 方向控制
引用地址:
STM32中断式发送特点和RS485方向控制
推荐阅读最新更新时间:2024-03-16 15:14
8051/2单片机常用的本地通讯方式 UART,RS485,I2C,SPI 之 I2C E2PROM 3
一、说明 单片机IO模拟,使用E2PROM 24C02C 1. 起始信号保持时间 Thd:sta 4us 2. 起始信号的建立时间 Tsu:sta 4.7us 3. SCL低电平持续时间 Tlow 4.7us 4. SCL高电平持续时间 Thigh 4us 5. 停止信号的建立时间 Tsu:sta 4us 二、演示 3.代码 /** * 8051/2 DEMO 3 * 常用的本地通讯方式 * 1. 串口UART, 波特率:9600 * 接设备的时候,一般只接GND RX TX,不会接Vcc,避免与目标设备上的供电冲突。 * 1.1 RS485标准( +2V ~ +6V:1 / -6V ~ -
[单片机]
stm32入门笔记(三)RT-Thread 当中spi和SFUD的移植问题解决方案
系统的方便性,让我开始了rtt的学习。 但是在添加spi来读取外部FLASH的时候,遇到了一些情况。 例如,找不到设备,或者说无法读取FLASH的ID。 下面通过介绍一套完整的流程来帮助大家熟悉。 首先。 cube mx。配置spi 2为打开 然后在menuconfig当中实现对驱动的定义和添加。 最后在里面添加,关于spi的驱动和sfud。 然后生成工程。 最后添加代码测试:https://www.rt-thread.org/document/site/programming-manual/device/spi/spi/ 可以得到结果。
[单片机]
stm32单片机oled显示程序 带浮点数显示
单片机源程序如下: // 文 件 名 : OLED // 版 本 号 : 2017521 // 功能描述 :在OLED上显示信息 // 接法说明: // ---------------------------------------------------------------- // OLED接法 // // GND 电源地 // VCC 接5V或3.3v电源 // CLK 接PD9(SCL) // MOSI 接PD7(SDA) // RES 接PD4 // DC 接PD5
[单片机]
ST全新多合一软件工具 让STM32用户烧写代码更方便
中国,2017年12月22日 -- 意法半导体 STM32CubeProgrammer (STM32CUBEPROG) 软件工具,在一个统一的多平台的用户可配置的环境内,为用户提供 STM32 微控制器代码烧写和固件升级功能。 STM32CubeProgrammer支持Windows®、Linux、MacOS® 三大操作系统,可以使用各种文件格式向STM32微控制器内部闪存/RAM或外部存储器烧写代码。具体功能包括存储器整体或扇区擦写选项字节。用户还可以生成程序安全烧写(固件安全安装更新)功能所需的加密文件,验证生产线上安装的软件的真伪,保护知识产权。 有了这个通用工具后,用户烧写 STM32微控制器 既可使用片上SWD
[嵌入式]
stm32---ADC
adc.c #include adc.h void ADCx_Init() { GPIO_InitTypeDef GPIO_InitStructure; ADC_InitTypeDef ADC_InitStructure; //1*时钟开启并配置ADC分频系数 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOA,ENABLE); RCC_ADCCLKConfig(RCC_PCLK2_Div6);//6分频,72/6=12Mhz,函数在rcc.h中 //2*GPIO配置 GPIO_InitStructur
[单片机]
将STM32的TIM作为普通定时器的方法
以stm32的TIM2作为例,将其配置成为普通的定时器,计时时间到即触发中断。 1:对定时器的基本配置 先声明一个定时器配置用的结构体变量TIM_TimeBaseStructure,具体可以参考STM32提供的TIM库 TIM_TimeBaseStructure.TIM_Period = 65535; //设置自动装载寄存器 TIM_TimeBaseStructure.TIM_Prescaler = 100; //分频计数 TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_Cou
[单片机]
STM32学习笔记之定时器输入捕获实验
实验目的: 在串口调试助手上打印出按键按下的时间 实验步骤: 实验程序: /*******************************timer.c********************************/ #include sys.h #include stm32f4xx.h extern u8 TIM5CHA1_CAPTURE_STA; extern u16 TIM5CHA1_CAPTURE_VAL; /* 本示例的作用就是, 当按键按下时,每次输入捕获的时间差, 然后从串口调试助手中打印出其时间差; */ /*
[单片机]
基于VSCode搭建STM32开发环境
众所周知, Keil 是一款收费软件,虽然可以Po解使用,但很多 公司 还是有点害怕,想必有不少读者都收到过**函。 之前,开发 单片机 项目,可以说 Keil 是最佳选择之一,但VSCode横空问世之后,这种格局被打破。 因为 VSCode 免费且好用,可以安装各种插件,很多 工程师 逐渐从Keil 转向了 VSCode。而且,VSCode还能实现 Keil 不能实现的一些功能。 下面就给大家分享一下 VSCode 搭建 STM32 开发环境的一些常规且使用的功能。 一、需要的软件和工具 下载 最新版 VS Code: 安装好插件,具有良好的代码补全与调试功能。 下载 LLVM:用于代码补全,其实可以理解
[单片机]