佛山市做网站,怎么制作网页并且发布到网上,东莞推广宣传短视频,网页打包成小程序文章目录 一、新建工程1.1 创建基于芯片的工程1.1.1 选择创建的rtt版本1.1.2 配置工程基本属性1.1.3 初创工程目录结构1.1.4 修改时钟配置1.1.5 配置调试下载器 1.2 创建基于开发板的工程 二、配置内核三、配置组件四、配置软件包五、适配配置六、其它问题 一、新建工程
1.1 创… 文章目录 一、新建工程1.1 创建基于芯片的工程1.1.1 选择创建的rtt版本1.1.2 配置工程基本属性1.1.3 初创工程目录结构1.1.4 修改时钟配置1.1.5 配置调试下载器 1.2 创建基于开发板的工程 二、配置内核三、配置组件四、配置软件包五、适配配置六、其它问题 一、新建工程
1.1 创建基于芯片的工程
1.1.1 选择创建的rtt版本
rt-thread有标准版和nano版两种版本标准版支持丰富的软件包和各种组件而nano版本仅支持msh shell功能我们本次就创建标准版本的rtt工程以便后面使用AT组件和mqtt软件包选择rtt版本如图所示 也可以使用图标来新建如图所示 1.1.2 配置工程基本属性
在上一步点击“RT-Thread项目”后就进入了工程基本属性的配置界面如图所示 图中各项的作用描述如下表
序号名称描述①工程名指定新建工程的名称。如果不想让此工程保存在默认的工作空间内可以将此栏下面的使用缺省位置去勾选然后指定工程的保存路径②工程模板RT-Thread Studio支持两种模板一种是基于芯片另一种是基于开发板基于芯片目前只有ST公司的处理器支持的很好基于开发板则有很多厂家提供他们的rtt bsp sdk③RT-Thread内核版本更新了RT-Thread Studio之后选择最新版本即可④厂商RT-Thread Studio支持的芯片厂商目前ST处理器支持的最好⑤芯片系列ST处理器有F1/F3/F4/F7/H7系列的MCU根据实际情况选择⑥芯片子系列当选择号了芯片系列之后芯片子系列就会列出该系列芯片的子系列比如STM32F103系列⑦芯片型号根据芯片系列和芯片子系列就圈定了芯片型号的范围我们在此范围内找到我们要开发的目标芯片比如STM32F103ZE⑧控制台串口就是msh shell功能使用的串口这里指向我们板卡上用于输出调试信息的或者其它信息的串口百问网的调试串口使用的是USART1引脚是PA9和PA10⑨调试器调试芯片的工具通常由j-link/st-link/daplink等根据自己手里面的工具来选择⑩调试接口有JTAG接口和SWD接口根据板卡的实际设计来选择
根据这些信息和我们板卡的实际情况我们的配置如下图所示 然后点击完成等待工程初创成功 1.1.3 初创工程目录结构
工程初创成功后得到如下图的工程其目录结构如图所示
每项对应的功能描述如下表
序号名称描述1RT-Thread SettingsRTT Studio内置配置工具可以配置内核、组件、软件包并将配置保存生成到工程中2CubeMX SettingsRTT Stduio内置STM32CubeMX工具用以配置ST处理器的外设3Includes其中展示了此工程包含使用的所有头文件4applications其中包含了用户开发的应用层的源文件默认包含了main.c里面实现了main函数5drivers里面包含了基于该芯片的外设驱动源文件和头文件不一定所有的外设都支持还有待持续维护开发。对于不支持的外设还是要用户自己去实现驱动函数6libraries基于该芯片的库文件一般是由厂商提供RTT Studio将其整理打包放到了工程目录结构中。在ST芯片的工程中有CMSIS和STM32XXX_HAL_Driver前者是存放CMSIS标准的头文件和库文件后者是放STM32处理器的HAL库文件7linkscripts存放该芯片编译时的链接文件8rt-threadrtt的内核文件和组件、软件包源文件使用RT-Thread Settings配置的内核、组件和软件包对应的源代码会在这一级中生效9rtconfig.hrtt的配置文件用以表明会用到哪些内核机制、组件和软件包使用RT-Thread Settings配置后会覆盖之前的改动所以不建议在rtt studio中手动修改此文件
1.1.4 修改时钟配置
在前面初创工程的时候有提示说默认的时钟使用的是HSI来配置系统时钟如果要使用别的时钟源来配置系统时钟就要去修改drv_clk.c我们的开发板有使用精度更高的HSE所以我们先去修改时钟配置。
重点要关注的是这几行代码
// 原本的代码使用的HSI
RCC_OscInitStruct.OscillatorType RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource RCC_PLLSOURCE_HSI_DIV2;
...
...
RCC_OscInitStruct.PLL.PLLMUL RCC_PLL_MUL16;// 修改成HSI
RCC_OscInitStruct.OscillatorType RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.PLL.PLLState RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource RCC_PLLSOURCE_HSE;
...
...
RCC_OscInitStruct.PLL.PLLMUL RCC_PLL_MUL9;如果不会自己配置系统时钟就可以打开Studio中内置的CubeMX Settings去配置然后生成工程。如何配置STM32CubeMX并且生成工程就不再多说了我们说一说生成工程之后的事儿。
先来记录下生成工程前我们的工程结构特别是drivers下的文件如图所示 使用CubeMX配置完生成工程之后 可以看到多出了cubemx文件夹而且drivers下的stm32f1xx_hal_conf.h被备份成了stm32f1xx_hal_conf_bak.h为了保证工程在studio中能够编译成功我们需要做以下几件事 将我们需要参考的配置源码复制到rtt studio工程中比如我们现在想要做的事情就是利用cubemx配置系统时钟然后我们这段代码复制到drv_clk.c中如图所示 我们可以将cubemx目录下main.c中配置系统时钟函数中的所有内容复制到rtt工程的drv_clk.c里面去完成对时钟的配置。其它的外设配置特别是rtt的drivers中没有支持的外设的驱动我们就可以利用这个方法来快速完成初始化。 将我们需要的代码添加到rtt studio工程之后为了能够编译通过我们需要将cubemx settings生成的文件夹cubemx中的一些文件或者全部文件排除构建比如main.c一个工程不可能存在两个同名的.c源文件还有新生的stm32f1xx_hal_conf.h它是有可能缺省原本的rtt studio中使用的外设的所以我们需要将其排除构建为了方便我建议是将cubemx整个目录都排除构建。如图所示
对着cubemx目录右键然后再资源配置那里选择排除构建。将某项排除构建后该项就会从当前的工程目录被移除但是还是存在工程文件夹中的没有被删除掉。如果想要回复可以去菜单栏打开“导航”选择“打开资源”如图所示 然后点击左下角的“显示位置”选择“C/C项目” 这样在“项目资源管理器”的边上就有一个“C/C项目”如图所示 可以看到外面之前选择排除构建的cubemx就出现了图标上有个/表示该项不会被构建要恢复就鼠标右键此项将此项选择加入构建如图所示 恢复hal配置头文件 在使用cubemx配置生成代码后drivers下的stm32f1xx_hal_conf.h变成了stm32f1xx_hal_conf_bak.h在cubemx目录下新生了一个stm32f1xx_hal_conf.h文件我们现在已经将cubemx目录排除构建了现在需要将被备份的hal库配置文件还原即重命名回来即可
经过上面的配置构建工程查看是否有配置错误。构建成功那么一个工程就新建好了可以开始后面对具体外设、内核、组件和软件包的配置了。
1.1.5 配置调试下载器
在调试或者下载程序之前需要先去配置调试下载器如图所示 点击图中红圈中的下拉图标进行配置根据自己实际情况选择即可。
1.2 创建基于开发板的工程
基于开发板的和基于芯片的思路是一样的只是基于开发板的会有更多厂商的芯片可以选择不过他们对于驱动的支持可能没有ST那样好很多驱动需要自己去完成。
二、配置内核
双击RT-Thread Settings进入配置界面 点击红圈中的左拉箭头进入细节配置 在这里可以配置内核的参数比如Tick频率、堆栈、线程通信、内存管理等等按需配置和FreeRTOS中修改FreeRTOSConfig.h类似的功能。
三、配置组件
还是使用RT-Thread Settings打开后可以看到图形界面和细节配置组件的配置既可以通过图形界面选择点击使用也可以在细节配置中使能配置参数 可以在这些组件中右键查看配置项必须要先使能才能进入配置项 这些同样是根据自己的内存、外设、中间组件选用等的实际需求来选择配置。
四、配置软件包
软件包可以在RT-Thread Settings的图形界面选择“添加软件包”进入软件包搜索添加界面 这里可以搜索软件包也可以按分类查找软件包比如我想要SPI OLED的软件包但是我不知道有哪些软件包且属于哪一类那我就搜索OLED如图所示 这里显示有3种刚好我们使用的是SSD1306我们就点进去看一下 它说现在仅支持I2C但是我们想要的是SPI接口的不满足所以就不添加软件包到工程但是这个软件包依然有参考意义看一下别人是如何实现RTT下的SSD1306驱动的可以尝试移植这时候我们就可以点击边上的“github”把源码clone下来参考。
我们同样也可以去细节配置里面的软件包去配置 我们以paho mqtt为例先使能这个软件包然后去配置细节比如模式、堆栈、是否使用示例等。
需要注意的是使用软件包还需要关心它的依赖项 点击“依赖项”它就会告诉我们它依赖的组件和应用层有哪些。
设置好RT-Thread Settings之后按CTRLS保存就会将改动添加生效到工程中在工程的packages和rt-thread下的components中可以看到文件变化 在rtconfig.h中看到具体的参数配置变化。
五、适配配置
这里我们先对前面的mqtt进行适配使能完 AT 客户端和 MQTT 示例后编译出错 说明在工程中我们未定义BSP_USING_I2Cx一般BSP开头的为板级支持包一般在 drivers/borad.h 中定义所以我们需要到该文件下找到I2C相关定义进行配置 其中有两个I2C接口我们只需要使能其中一个同时去找到板子相应I2C引脚去修改引脚项即可 再次编译报错消失 接下里是另一个适配配置最后清空项目然后重新构建查看是否能变成通过一般一开始都会有问题需要查漏补缺一点一点的调整好。比如我在组件中使用了pwm编译后提示了一堆找不到定时器相关的宏定义且drv_pwm.c还有个红叉如图所示 类似这样的问题先去hal_conf.h中看一下我们是否使能了芯片的定时器外设 可以看到我们这里是没有放开的将注释去掉之后重新编译还是出错 这种看提示看不出来什么我们就去源文件看看具体情况 可以看到是这个枚举类型因为没有前置宏定义变成了一个空枚举所以编译出错。而这些BSP_USING_XXX预处理条件有些是无法在RT-Thread Settings里面设置的需要手动进行宏定义我们前面说过最好不要手动去修改rtconfig.h所以我们将这些BSP_USING_XXX宏定义放到board.h里面宏定义这样就避开了rtconfig.h被RT-Thread Settings覆盖修改如图所示 可以看到在board.h里面由各个组件的配置项没有也没关系ST这里提供了示例只有3路PWM如果我们是其它的就自己添加定义就好比如PWM12(根据自己的设计选择这里只是举例)如图所示 然后保存重新构建工程还是提示有个错误 说是没有PWM12_CONFIG我们去源文件看看 我们一开始看到这个错误会一头雾水不知道下面该怎么办了这时候我们就可以参考官方给的例子他不是给了三路PWM的宏定义示例吗我们放开一路比如PWM1 然后保存构建因为没有修改PWM12所以肯定会报错 结果PWM1也是一样的错误这说明官方也没有支持PWM1如果挨个的碰运气肯定不是好方法其实我们可以去看看这个源文件用到了哪些头文件因为这些配置肯定是在某个头文件中会定义或者声明的 这里面和PWM配置最相似看着最有关联的应该就是drv_config.h这个头文件了我们把鼠标放在头文件名称上按鼠标左键跳过去 在这里看到了有个pwm_config.h我们同样跳过去 从这个文件中我们可以看到这些类似的PWMx_CONFIG配置官方仅支持了PWM2/3/4/5没有我们要使用的PWM12那么我们就仿照这些格式写我们自己的PWM12_CONFIG
#ifdef BSP_USING_PWM12
#ifndef PWM12_CONFIG
#define PWM12_CONFIG \{ \.tim_handle.Instance TIM2, \.name pwm12, \.channel 12 \}
#endif /* PWM12_CONFIG */
#endif /* BSP_USING_PWM12 */然后再保存构建工程记得把PWM1还原 我们双击这个错误跳过去看下 这个意思就是说这个函数没有定义这个函数的作用是初始化TIM PWM通道的引脚的。根据HAL库的开发经验这个需要用户自定义我们也可以使用cubemx配置参考下 再次构建工程就顺利通过了 这是因为配置完cubemx后stm32f1xx_hal_msp.c文件中定义了HAL_TIM_MspPostInit函数完成了对pwm的初始化 将开发板连接stlink烧录器并连接电脑打开串口点击烧录观察现象 此时我们会发现在串口工具中敲回车没反应是因为在main.c中将UART重新初始化了一次所以我们需要注释掉几个初始化但是我们会发现每次使用cubemx配置后几个初始化会被重新打开所以相比与cubemx生成的main.cRTT中的main.c更为好用但是drivers_clk中的时钟配置与main.c中的时钟息息相关所以我们干脆将cubemx生成的main.c的时钟配置代码复制粘贴到driver_clk中并将main.c排除构建将RTT中的main.c添加构建 同时将原先cubemx生成main.c的时钟配置函数在drivers_clk中的声明删除掉 那么此时我们的烧录就需要展开一些工作关掉开发板电源将启动方式改成系统内部程序即将红色boot的开关的on的1拨向另一端然后打开电源打开STM32Programmer工具将连接方式改成UART选择对应串口号我这里是COM7点击连接 接着需要擦除程序并断开连接操作如下 擦除并断开后界面如下 重新将连接方式换成stlink点击连接在这里连接时我发现一直连接不上stlink我重新换了个stlink即可 于是我们断开连接烧录程序到开发板同时打开串口观察现象 这里串口会打印是因为切换到RTT的main.c同时按下回车串口会换行
六、其它问题
我们在使用RT-Thread Studio中的CubeMX使时由于将cubemx里面的一些文件排除了构建特别是stm32f1xx_hal_conf.h但是使用cubemx后关掉它的话每次都会将原本在drivers下的stm32f1xx_hal_conf.h备份创建新的stm32f1xx_hal_conf.h且时钟配置那里也会变成使用cubemx配置生成的SystemClock_Config函数所以如果要使用cubemx最好的办法是将rtt studio中的applications里面的main.c排除构建而cubemx里面讲main.c/stm32f1xx_hal_msp.c/Inc文件夹添加构建直接使用cubemx创建的代码