stm32cube计数器 cube安装问题

FreeModBus&在STM32&CUBEMX环境中的移植小记
Modebus协议是个古老的协议,原来在实验室的时候就听导师提到过他的变频器产品就是用的是modbus协议。还分什么asci模式,16进制模式。当时听的也不是很明白,感觉挺复杂的。没想到参加工作这么多年,碰到的项目刚好要用,看来欠的帐总是要还的。
可以参考文献如下:
该篇文章写的较为详细,基本能够解决所有问题。
该文章对各种函数供能做了详细说明。
cube社区里这篇帖子也做了详细使用说明。
在原地址不能下下来,所以我在github上面下载了库函数,如下:,是针对STM32F10X系列的。
我也是使用cubeMX没有多久,因为是直接学习的STM32系列,所以放弃了原来的LIB库函数API,直接使用了STM32推荐的可视化配置cubeMX。尽管个人对cubeMX使用比较熟练了,对cubeMX生成的HAL类库函数与宏定义有一定认识了,但是移植起来还是花了我几天,遇到几个细节的小问题卡了几天的时间。希望我的教训可以给看到此篇文章的人节省点时间,多点时间享受生活。上面的几篇文章对freemodbus做了详尽的说明,这里讲我遇到的几个小问题。
环境STM32CubeMX 4.20.1
F4库函数版本 Firmware Package for Family STM32F4 1.15.0
移植目标型号:STM32F405
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart,
uint8_t *pData, uint16_t Size)
为了节省时间就更改配置改了中断方式,调用的函数为
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart,
uint8_t *pData, uint16_t Size)
每接受一个字节就进入一次中断,同时打开定时器使能。在定时器中断函数中,判断一帧数据接受完成。用该方式就没有什么问题,定时器中断函数中调用的
prvvTIMERExpiredISR( )函数总是能正确判断到一个完整的帧,而不是若干个字节。
HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
prvvTIMERExpiredISR( );
prvvTIMERExpiredISR( )函数实际上是通过函数指针调用的BOOL xMBRTUTimerT35Expired(
void )函数,在【Mbrtu.c】文件中。可以在
STATE_RX_RCV:
xNeedPoll = xMBPortEventPost( EV_FRAME_RECEIVED );
该处设置一个断点,看是否正确的收到一帧。后面的处理不停的按F10键就可以跟踪的看整个程序是怎么执行的。做到这里成功就完成了大部分工作。
这个我看了半天。eMBErrorCode eMBPoll( void )函数在主函数中不停的执行,
case EV_EXECUTE:
ucFunctionCode =
ucMBFrame[MB_PDU_FUNC_OFF];
eException =
MB_EX_ILLEGAL_FUNCTION;
for( i = 0; i &
MB_FUNC_HANDLERS_MAX; i++ )
if( xFuncHandlers[i].ucFunctionCode ==
xFuncHandlers[i].ucFunctionCode == ucFunctionCode )
eException =
xFuncHandlers[i].pxHandler( ucMBFrame, &usLength
if( ucRcvAddress !=
MB_ADDRESS_BROADCAST )
if( eException != MB_EX_NONE
usLength = 0;
ucMBFrame[usLength++] = ( UCHAR )(
ucFunctionCode | MB_FUNC_ERROR );
ucMBFrame[usLength++] =
if( ( eMBCurrentMode == MB_ASCII )
&& MB_ASCII_TIMEOUT_WAIT_BEFORE_SEND_MS )
vMBPortTimersDelay(
MB_ASCII_TIMEOUT_WAIT_BEFORE_SEND_MS );
eStatus = peMBFrameSendCur(
ucMBAddress, ucMBFrame, usLength );
其中的peMBFrameSendCur( ucMBAddress, ucMBFrame, usLength
)函数开始发送回应帧数据,这个函数指针指向 -& eMBErrorCode eMBRTUSend( UCHAR
ucSlaveAddress, const UCHAR * pucFrame, USHORT usLength
),这个函数中再调用
eSndState = STATE_TX_XMIT;
vMBPortSerialEnable( FALSE, TRUE
vMBPortSerialEnable( FALSE, TRUE
)只是使能发送,所有的发送都是在中断中进行的。所以出现了上面提到的文章中两种不同的办法。需要一使能发送中断,就立刻进入中断函数发送数据。
文章中的方法为增加了一个
prvvUARTTxReadyISR()函数。我估计是作者怕第一次进不去中断,后面就不能发送数据。
void vMBPortSerialEnable( BOOL
xRxEnable, BOOL xTxEnable ) { if( xRxEnable ) {
__HAL_UART_ENABLE_IT(&Modbus_UartHandle, UART_IT_RXNE); } else
{ __HAL_UART_DISABLE_IT(&Modbus_UartHandle, UART_IT_RXNE); }
if( xTxEnable ) { __HAL_UART_ENABLE_IT(&Modbus_UartHandle,
UART_IT_TXE); prvvUARTTxReadyISR(); } else {
__HAL_UART_DISABLE_IT(&Modbus_UartHandle, UART_IT_TXE);
__HAL_UART_ENABLE_IT(&Modbus_UartHandle, UART_IT_TC); }
文章中如下,显得简洁些。
void vMBPortSerialEnable( BOOL
xRxEnable, BOOL xTxEnable ) { if (xRxEnable) {
__HAL_UART_ENABLE_IT(&huart6,UART_IT_RXNE); } else {
__HAL_UART_DISABLE_IT(&huart6,UART_IT_RXNE); } if (xTxEnable) {
__HAL_UART_ENABLE_IT(&huart6,UART_IT_TXE); } else {
__HAL_UART_DISABLE_IT(&huart6,UART_IT_TXE); } }
通过实验,这种方法如果采用HAL_UART_Transmit
函数也是可以使能后直接进入中断,然后在中断中不断发送一个字节。
但是我采用了HAL_UART_Receive_IT 与 HAL_UART_Transmit_IT 函数,感觉这样不需要@param
Timeout: Timeout duration
参数,是不是可以适当节省点在中断中的一点时间。在这种方式中就必须采用前一种方法了,因为使能中断并不能立即进入发送中断函数需要首先调用一次HAL_UART_Transmit_IT
函数触发后不停的输出。
HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
//UNUSED(huart);
/* NOTE: This function Should not be
modified, when the callback is needed,
the HAL_UART_TxCpltCallback could be
implemented in the user file
prvvUARTRxISR();//接收中断处理函数
HAL_UART_TxCpltCallback(UART_HandleTypeDef * huart)
prvvUARTTxReadyISR();//发送完成终端处理函数
HAL_UART_RxCpltCallback 与
HAL_UART_TxCpltCallback两个weak型的函数重写,这两个函数在void
HAL_UART_IRQHandler(UART_HandleTypeDef *huart)中被调用。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。求教各位大佬,我安装好了jre,为什么安装stm32cubeMX的时候还是提示我没有jre环境啊_stm32cube吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:589贴子:
求教各位大佬,我安装好了jre,为什么安装stm32cube收藏
求教各位大佬,我安装好了jre,为什么安装stm32cubeMX的时候还是提示我没有jre环境啊
重启一下呢
登录百度帐号SetupSTM32CubeMX新建工程及仿真问题_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
SetupSTM32CubeMX新建工程及仿真问题
&&图文说明了SetupSTM32CubeMX新建工程步骤及使用工程中问题解决...
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩5页未读,
定制HR最喜欢的简历
你可能喜欢STM32CubeMx配置过程详解_图文_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
STM32CubeMx配置过程详解
&&STM32CubeMx配置过程
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩23页未读,
定制HR最喜欢的简历
你可能喜欢你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
Stm32 cube软件的使用
简介:STM32Cube 是一个全面的软件平台,包括了ST产品的每个系列。(如,STM32CubeF4 是针对STM32F4系列).
STM32Cube(TM) 开发平台包括STM32CubeMX图形界面配置器及初始化C代码生成器和各种类型的嵌入式软件。配置初始化工具能够一步一步地引导用户完成微控制器配置,而嵌入式软件将为用户省去整合不同厂商软件的繁琐工作。嵌入式软件包括一个新的硬件抽象层(HAL,Hardware Abstraction Layer),用于简化代码在STM32产品之间的移植过程。通过在一个软件包内整合在STM32微控制器上开发应用所需的全部通用软件,该平台根除了评估每个软件之间关联性的复杂任务。STM32Cube提供数千个用例和一个软件更新功能,方便用户快捷高效的获取最新版本的软件。
平台包括了STM32Cube 硬件抽象层和一套的中间件组件(RTOS, USB, FS, TCP/IP,
Graphics, 等等).
直观地进行STM32选择
图形化配置
- C代码项目产生,涵盖STM32初始化部分。兼容IAR, KEIL和GCC编译器
- 支持Eclips
(简单介绍一下哈,详细的资料百度看看)
我刚开始用到时候是想把开发板的小灯点亮,可是不知道要怎么配置模板,几次尝试后都失败了,后来才知道有这个好东西,通过图形配置引脚很好用,先来看下他的一个界面
Io口配置界面,是不是图形化很直观呢
软件要怎么用呢?首先感谢群里各位学长的指导,下面从软件的安装说起,有不足的地方希望大家指出,原谅小弟是个菜鸟….
软件的安装(以f4的库为例,大家可以下载其他相应的库)
要下载两个文件
stm32cubemx.zip(软件的安装包)、 stm32cubef4.zip(库文件和一些例程等)
STM32CubeMX下载地址:
F2 F4系列芯片驱动包下载页面(库文件的下载):
www.st.com/web/en/catalog/tools/PF259242
2)STM32CubeMX程序安装
stm32cubemx.zip解压为一个文件,名称为 SetupSTM32CubeMX-4.2.0.exe,这是STM32CubeMX的安装包。双击软件的安装包它会提示要在java环境下安装,随之会弹出一个下载java的网页,点击下载即可,下载完毕后进行安装它会自动重启浏览器进行注册(他让点什么就点击什么就好了)成功后就能进行软件的安装了。
3) stm32cubef4.zip 库文件包的使用。
网上说解压文件到软件安装目录下进行添加,但我没这样做,
首先把stm32cubef4.zip软件的安装目录下
到这里我们就安装好软件和库了。
工程的建立,以及软件的简单使用(这里我用的是nucleo-f411re开发板,用它点亮一个led小灯为例)
新建工程以及工程的配置
下一步就是对我们的工程进行设置了,点击菜单Project -& Settings,在Project Settings对话框的Project Name框中填写工程名称,在Project Location框中填写工程所在目录(或者点击右侧Browse按钮选择目录),最后点击OK按钮,如下图所示。注意,目录中不能包含中文,否则不能生成IDE工程。
点击工具栏生成代码按钮或菜单Project -& Generate Code,开始在工程所在目录生成IDE工程和配置代码。完成后弹出Code Generation对话框,点击Open Project按钮打开MDK,如图所示。
在mdk5中打开工程后添上自己的代码就能工作了。。。
点亮了我的小灯,嘿嘿。谢谢大家
来顶一个啊
大赞!~\(≧▽≦)/~
dashenqiujiu
为什么我也是英文路径 换了好多次 还是生成不了工程 提示说虽然代码已经生成但是MDK-ARM发生了一个问题 怎么解决 我有装JAVA的 用不用安装esclipe
要回复文章请先或}

我要回帖

更多关于 stm32cubemx中文教程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信