一种基于μC/OS-III及STM32的多功能控制器

发布者:数字火花最新更新时间:2021-07-14 来源: eefocus关键字:μC  OS-III  STM32  多功能控制器 手机看文章 扫描二维码
随时随地手机看文章

电动轨道车控制系统一般分为多个子系统,子系统受一个主控器控制。这样的结构设计繁琐,编程复杂。采用μC/OS-III操作系统、STM32F103RC微控制器、12864液晶屏、PVC按键、无线串口模块、锂电池等实现具有人机界面、无线串口功能的总线主控器。该控制器具有人机界面、轨道车主控器、遥控接收器、遥控面板等多种功能,并且能在不同项目中使用。μC/OS-III从官网上下载,文件名为Micrium_uC-Eval-STM32F107_uCOS-III,版本为V1.29.01.00.


1硬件结构


从系统接口看,该控制器具有显示、按键、无线收发、串口、485总线等接口,作遥控面板时用电池供电,内部具有电池和充电电路。硬件框图如图1所示。


图1中无线串口用模块实现系统遥控功能,显示器用并口连接。键盘部分有或门电路,可实现按键中断。电源电路中的外部电压、电池电压可被控制器测量,当测量得到无外部电压输入时,控制器自动切换到遥控面板模式。485总线接口用于和其他子系统通信。




图1多功能控制器硬件框图



2系统移植


STM32F1XX固件库最新版本为V3.5.0.μC/OSIII支持的库文件版本为V2.1.0.为了μC/OS-III能够在最新的固件库上运行,首先用新固件库替换原有固件库代码并改变入口头文件名,然后有两处代码需要作修改。一是芯片时钟初始化函数,函数名为“BSP_Init”,修改为:



这两处都是因为原有固件库需要多条语句才能实现时钟初始化,新版本提供专门的初始化函数。


3驱动编写


3.1键盘驱动的编写


μC/OS-III具有任务信号量的功能,该信号量随着任务的创建而创建。键盘驱动有键盘扫描任务实现,按键触发外部中断,外部中断发送任务信号量到键盘扫描任务,键盘扫描任务扫描键盘并把键值保持在全局变量中。代码如下:



3.2液晶显示器printf函数


液晶显示器一般是输入一个字符的编码和位置然后显示出来,不能实现字符串格式化显示。实现printf,首先使用格式化函数“vsnprintf”得到格式化后的字符串,然后该字符串被打印到屏幕上。具体函数如下:



程序中va_list是在C语言中解决变参问题的一组宏,“va_start(v_args,format);”得到第一个可变参数地址,这样把自定义的变参传递到库函数的变参中。


函数“LCD12864_print_string(buf_str);”为自定义函数,因为CH12864液晶屏内的逻辑行和显示行不同。逻辑行只有两行,起始地址分别为0x80和0x90,为显示行的一三行和二四行。在打印字符串时,每打印一显示行就要重新切换位置,保证显示是连续的。


该显示器显示中文字符的起始位置只能是偶数地址,奇数地址显示中文字符会显示乱码。


3.3串口接收驱动


在μC/OS-III代码中有串口接收部分的驱动,但经过测试,当无操作系统的模块连续发送时,该驱动接收出现漏接或乱码的现象。其原因为该驱动每接收一个字符都要进行一次系统调用,在这个调用过程中发送的字符无法接收。改变原驱动用信号量同步的办法,使用消息通信和结束字符判定的方法即可完整接收到无操作系统模块连续发送来的字符串。


需要修改两个函数,一是中断接收函数:





该中断函数把每个字符先保存在数组中,当出现结束字符时发送消息到接收函数。


二是串口接收函数:





该函数每次接收完成后关中断,未完成可以挂起并由中断函数进行连续接收,保证了接收速度。


4软件结构


多功能控制器可能作为手控器、遥控接收器、遥控器使用。根据外部电源状态和按键信号改变程序执行的模式来实现一机多用。


作为手控器时,每个用户界面作为一个任务。每个界面任务需要建立一些子任务协助处理,这些子任务受任务信号量和任务消息控制,当获得信号量或者消息时任务执行,执行完成后挂起。子任务根据用户操作把相关指令发往系统其他单元,各个单元执行多功能控制器的命令并返回用户需要查看的参数。系统单元一般工作在状态机的模式,根据多功能控制器的命令进入不同的运行状态。轨道运输车的电机控制单元就可工作在前进、倒车、停车三种状态,这三种状态可加上速度参数。电机控制器收到状态和参数后自动执行并返回电量功率等参数给用户界面。


作为遥控接收器时,多功能控制器作为一个数据中继器使用,主要任务是首先从无线串口接收数据,然后核对该数据的确认码。核对通过则通过485总线发给系统其他单元,否则丢弃该数据。当系统单元返回数据时,多功能控制器在数据上添加确认码,然后从无线串口对外发送。


作为遥控器时,该模式和手控器工作过程大致一样。不同的是通过无线串口通信,发射时添加确认码,接收时核对确认码。


结语


多功能控制器通信接口多样,具有人机界面,配有μC/OS-III操作系统,有完善的硬件驱动,可在分布式控制系统中完成多种任务。


关键字:μC  OS-III  STM32  多功能控制器 引用地址:一种基于μC/OS-III及STM32的多功能控制器

上一篇:STM32 RTC寄存器操作步骤
下一篇:STM32F10x的复位及时钟控制

推荐阅读最新更新时间:2024-11-08 10:29

stm32数据存储
大端模式:数据高字节保存在内存低地址,数据低字节保存在内存高地址; 小端模式:数据高字节保存在内存高地址,数据低字节保存在内存低地址; stm32默认小端存储,如下图: volatile float f = -0.1; volatile float *p = volatile uint32_t i = 0xaabbccdd; volatile uint32_t *p2 = volatile int32_t i2 = -5; volatile int32_t *p3 = &i2; 变量名 地址 值 f 0x20000000 0xBDCCCCCD p 0x20000004 0x20000000 i
[单片机]
IAR环境下STM32+IAP方案的实现
一、什么是IAP,为什么要IAP IAP即为In Application Programming(在应用中编程),一般情况下,以STM32F10x系列芯片为主控制器的设备在出厂时就已经使用J-Link仿真器将应用代码烧录了,如果在设备使用过程中需要进行应用代码的更换、升级等操作的话,则可能需要将设备返回原厂并拆解出来再使用J-Link重新烧录代码,这就增加了很多不必要的麻烦。站在用户的角度来说,就是能让用户自己来更换设备里边的代码程序而厂家这边只需要提供给用户一个代码文件即可。 而IAP却能很好的解决掉这个难题,一片STM32芯片的Code(代码)区内一般只有一个用户程序。而IAP方案则是将代码区划分为两部分,两部分区
[单片机]
IAR环境下STM32+IAP方案的实现
interrupt 和 using 在C51中断中的使用
8051 系列 MCU 的基本结构包括:32 个 I/O 口(4 组8 bit 端口);两个16 位定时计数器;全双工串行通信;6 个中断源(2 个外部中断、2 个定时/计数器中断、1 个串口输入/输出中断),两级中断优先级;128 字节内置RAM;独立的 64K 字节可寻址数据和代码区。中断发生后,MCU 转到 5 个中断入口处之一,然后执行相应的中断服务 处理程序。中断程序的入口地址被编译器放在中断向量中,中断向量位于程序代码段的最低地址处,注意这里的串口输入/输出中断共用一个中断向量。8051的中断向量表如下: 中断源 中断向量 --------------------------- 上电复位 0000H 外部中断0 000
[单片机]
基于P87C591的机车通风机节能控制系统
   1 引言   由于机车牵引电动机在持续运行中存在的损耗会使电动机各部分的温度升高。过高的温度既影响电动机的运行寿命.也影响电动机的效率。牵引电动机大多采用强迫通风方式冷却。然而处于工作状态的牵引电动机的通风机均保持恒定的通风量,不能根据绕组温升变化进行调节,造成电能浪费。因此,提出一种机车通风机节能控制系统。该系统设计采用P87C59l单片机作为控制核心,利用三相交流调压模块作为通风机的电动机控制模块,并根据直流牵引电动机在持续运行中的温升变化,控制通风机电动机的转速,调节通风量,从而实现调节温升和节能的目的,并具有良好的实用价值。    2 系统组成及工作原理   图1给出基于P87C591的机车通风机节能控制
[电源管理]
基于P87<font color='red'>C</font>591的机车通风机节能控制系统
PWM控制led渐变
PWM,中文释义:脉冲宽度调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。 PWM 是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。 STM32的定时器除了TIM6和7。其他的定时器都可以用来产生PWM输出。其中高级定时器TIM1和TIM8可以同时产生多达7路的PWM输出。而通用定时器也能同时产生多达4路的PWM输出,这样,STM32最多可以同时产生30路PWM输出!(在编程过程中的定时器重映像时涉及到) STM32 的PWM是TIMx_ARR寄存器确定频率(周期)、由TIMx_CCRx寄存器确定占空比的信号。 PW
[单片机]
STM32与Flash AT45DB321D之间读写数据
Flash这种芯片调试,首先必须要读出他的ID来,才能进行读写操作。 AT45DB321D 8192pages(512/528Bytes/Pages)大约4M左右,与单片机之间SPI通信。 大体流程就是先配置好spi,读出芯片ID,往flash里面写一个数据然后再把它读出来,可以通过串口把写入的数据打印出来。写入的过程就是先将数据写入到缓冲器(1或2),在从缓冲器写到指定页的指定地址(具体页地址和字节地址看芯片手册),读的过程也是一样,时序图都在芯片手册有。在这只放一段读ID的程序,详细代码参考的由振南修改的SPI_FLASH,放在我的Github里面。~~~Github~~~ #define Dummy_Byte
[单片机]
<font color='red'>STM32</font>与Flash AT45DB321D之间读写数据
C8051F单片机在远端测控装置中的应用
摘 要 :本文介绍了C8051F系列单片机在远端测控装置中的应用,给出了整个系统的结构,包括硬件配置和系统网络构成,对一些技术问题也做出了详尽的说明。 关键词: C8051F ;远端测控;硬件配置 C8051F单片机是完全集成的混合信号系统芯片(SoC),具有与8051指令集完全兼容的CIP-51内核和高速、高性能、高集成度等特点。在本文设计的一套远端测控装置中取得了较好的效果。 系统简介 远端测控装置是一种现场可编程的控制器,它能完成数据的采集控制,而通过远程通信的方式(如电台、CDMA、拨号等)将数据上传至中心站或接收中心站的遥控指令。它往往被安装在比较分散、环境比较恶劣、无电源保障(经常断电或使用太阳能)且无人值
[单片机]
<font color='red'>C</font>8051F单片机在远端测控装置中的应用
GD32单片机和STM32单片机的区别
一、前言 什么GD32? GD32是国内开发的一款单片机,据说开发的人员是来自ST公司的,GD32也是以STM32作为模板做出来的。 所以GD32和STM32有很多地方都是一样的,不过GD32毕竟是不同的产品,不可能所有东西都沿用STM32,有些自主开发的东西还是有区别的。相同的地方我们就不说了,下面我给大家讲一下不同的地方。 二、区别 1、内核 GD32采用二代的M3内核,STM32主要采用一代M3内核,下图是ARM公司的M3内核勘误表,GD使用的内核只有752419这一个BUG。 2、主频 使用HSE(高速外部时钟):GD32的主频最大108M,STM32的主频最大72M 使用HSI(高速内部时钟):GD32的主频最大10
[单片机]
GD32单片机和<font color='red'>STM32</font>单片机的区别
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved