96Boards扩展板 STM32 B96B-F446VE 牛刀小试
前言
原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正。
本文使用Markdown写成,为获得更好的阅读体验和正常的链接、图片显示,请访问我的博客原文:
http://www.cnblogs.com/sjqlwy/p/st_puzzle.html
这块B96B-F446VE(以下简称stm96)官方缺少相关例程和应用资料,网上别人分享的项目也很匮乏,所以上手stm96的过程中走了很多弯路,这里记录如下。
1、文档资料汇总
首先是意法半导体产品页面,资料很详细(需要注册下载),这里特地讲一下各个文件:
- TN1235 :ST-Link基本介绍,包括虚拟串口(VCP)的说明。
- UM1959 :用户手册,注意不是应用手册,主要是该扩展板的技术参数,非常有用。
- B-F446E-96B01A BOM : Bill of Materials,物料表,可以知道具体的原件。
- B-F446E-96B01A schematics pack :电路图,非常有用。
- ST-Link 固件和驱动下载 :有些功能需要升级到最新固件
- STM32 ST-LINK Utility:非常有用的工具,之前有所介绍。
其次是Mbed的开发板页面,也有很多参考信息:
PeripheralPins.c 外围引脚定义
PinNames.h 引脚名称
Arduino兼容引脚和Grove引脚定义图


其他参考网站:
- EMCU | 关于STM32相关非常多的参考
- 21ic | 国内关于ST MCU 比较不错的论坛
- stmcu_cn | st中文网站
- stm32f4-discovery | 面向初学者
- 正点原子 和 野火 都是国内比较不错的stm32论坛
2、开发工具
个人了解到的开发IDE有:
- Keil | 流行的开发工具,收费
- mbed online | ARM官推,在线免费使用
- Arduino IDE (stm32duino) |基于stm32duino项目,免费
- CooCox IDE | 基于Eclipse和gcc,免费
由于个人不喜欢在电脑里安装太多软件,另外想要Linux CLI终端、Windows GUI图形切换时不费劲,所以想要找一个通用(支持多种开发板)且跨平台的开发环境,最后找到了PlatformIO :


可以看到它支持市面上各种常见平台的开发,真正Use whenever. Run everywhere.
PlatformIO核心是Platform Core,使用该命令行程序即可以使用大多数功能。此外,它还可以集成到多种流行的编辑器中,比如Atom、Visual Studio Code、Sublime Text、Vim等。这里我们以VSC为例。
安装VSC之后,在扩展界面搜索并安装PlatformIO IDE即可,另外一个Jun Han制作的PlatformIO扩展也不错。

建议额外安装vscode-icons扩展。

正常安装之后即可以看到左下角多出一排按钮,启动vsc也会看到程序主界面。
3、小试牛刀
点击New Project,开发板选择B96B,开发框架支持mbed和STM32Cube,以mbed为例。

点灯及串口通讯代码如下:
#include "mbed.h"
//初始化一个串口,这里使用ST-Link默认的虚拟串口,串口调试设置为9600-8-N-1,流控制:无。
Serial pc(SERIAL_TX, SERIAL_RX);
DigitalOut myled(LED1);
init main(){
//pc.baund(19200);
while(1){
pc.printf("Hello World\n");
myled = !myled;
wait(1);
}
}

【编译上传】a.首次编译固件会额外编译mbed os,耗时较长,后面就好了;b.默认会将firmware.bin自动拷贝到stm96存储空间里,但是我这里有问题,拷贝失败(虽然显示success)?没有reset?总之我是用ST-Link Utility手动上传的,生成的bin文件可以右击选择在资源管理器打开。
3.1 代码简述
Serial xx(tx, rx) | 参考mbed手册,可以使用指定串口,tx在前,rx在后。
参考原理图及PinNames.h,可知SERIAL_TX = PC_10 = USBTX,SERIAL_RX = PC_11 = USBRX。

【f446的uart4与st-link相连,由st-link的虚拟串口与PC连接】
板载用户资源引脚(计LED x 3;button x 1):
LED1 PD_10 LED2 LED1 LED3 PD_11 LED4 PD_12 LED_RED LED1 USER_BUTTON PD_13 BUTTON1 USER_BUTTON 虚拟串口的默认波特率为9600,也可以手动设置。
程序效果为:每秒钟串口输出
Hellow World,并且红色LED闪灭。串口调试可以用Xshell、AiThinker Serial Tool 或者 platformio for VSC自带的。
platformio串口波特率默认9600,可以通过platformio.ini修改。
除了mbed框架,platformio还支持stm32cube框架编程。
3.2 点灯也出错?教练这剧本不对啊!
初起看到灯闪了也没啥,结果串口调试总是不对,9600波特率显示乱码,调整为19200显示正确。搜索问题时发现19200为9600的两倍。再回头去看LED1闪灭频率,调整为10s,结果数下来5秒就交替闪灭,这里面一定有问题!由于对于STM32相关开发还是小白状态,为了解决问题查看了大量资料,最后猜测是系统时钟问题。
发现问题
解决问题
现在我们怀疑mbed使用了外部晶振,而且频率设置可能错了。查看BOM和PCB文件:

【板载三颗晶振】

【PCB文件显示晶振位置】

【原理图】OSC=OSCILLATOR 振荡器
对比原理图,可知X1附属于ST-Link,X2和X3附属于STM32F446主芯片。那么X2和X3是什么作用呢(后来知道X3一般为外部晶振)?
查阅以下文章STM32时钟配置和STM32 系統時脈介紹,捋了捋思路,对照STM32F446芯片手册,终于搞明白了。
- HSI是STM32F446高速内部时钟,RC振荡器,频率为8MHz。
- HSE是高速外部时钟,X3石英振荡器,频率为16MHz。
- LSE是低速外部时钟,接频率为32.768kHz的X2石英晶体。
16/8=2,正好两倍关系。这时我们看到ST官方Wiki页面Automatic clock configuration,按图索骥:
.platformio\packages\framework-mbed\targets\TARGET_STM\TARGET_STM32F4\TARGET_STM32F446xE\TARGET_B96B_F446VE目录下的system_clock.c文件,可以看到/* Select the clock sources (other than HSI) to start with (0=OFF, 1=ON) */
#define USE_PLL_HSE_EXTC (0) /* Use external clock */
#define USE_PLL_HSE_XTAL (1) /* Use external xtal */
提示mbed正在使用外部时钟。
.platformio\packages\framework-mbed\targets\TARGET_STM\TARGET_STM32F4\device目录下的stm32f4xx_hal_conf.h文件,可以看到/* ########################## HSE/HSI Values adaptation ##################### */
/**
* @brief Adjust the value of External High Speed oscillator (HSE) used in your application.
* This value is used by the RCC HAL module to compute the system frequency
* (when HSE is used as system clock source, directly or through the PLL).
*/
#if !defined (HSE_VALUE)
// #define HSE_VALUE ((uint32_t)8000000U) /*!< Value of the External oscillator in Hz */
#define HSE_VALUE ((uint32_t)16000000U) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
问题明了了,默认外部晶振频率为8MHz,我们手动修改为16MHz,先clean重新编译,闪灭时间和串口波特率终于正常了,问题解决。
.platformio在当前用户文件夹下,如C:\Users\yourname\。
96Boards扩展板 STM32 B96B-F446VE 牛刀小试的更多相关文章
- 基于uFUN开发板和扩展板的联网校准时钟
项目概述 上周在uFUN试用群里看到管理员说试用活动快结束了,要抓紧完成评测总结,看大家的评测总结也都写了,我也不能落后啊!正好最近做的扩展板到手了,于是赶紧进行调试,做了一个不用校准的时钟,时钟这种 ...
- 使用36-pin的STM32输出VGA, VGA output using a 36-pin STM32
使用36-pin的STM32输出VGA 手头上有个项目需要通过单片机来控制将图像显示在LCD上,在网上搜了一阵子,发现都是使用的FPGA做的, 开始自己对FPGA不是很熟,一直在用的也是ARM系列的, ...
- ucos实时操作系统学习笔记——操作系统在STM32的移植
使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只 ...
- [转] STM32各种时钟的区别
[原创]:http://m.oschina.net/blog/129357 我在原创的基础又从另一位博主处引用了一些内容. 时钟系统是处理器的核心,所以在学习STM32所有外设之前,认真学习时钟系统是 ...
- [转载]:STM32为什么必须先配置时钟再配置GPIO
转载来源 :http://blog.csdn.net/fushiqianxun/article/details/7926442 [原创]:我来添两句,就是很多同学(包括我)之前搞低端单片机,到了stm ...
- STM32 NVIC配置详解
例程: /* Configure one bit for preemption priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1) ...
- MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL
MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL 是因为目标板的芯片处于休眠 ...
- MDK5 STM32编译问题汇总
MDK5 STM32编译问题汇总 WIN8.KEIL-MDK-5 编译时,出现弹窗"The ARM C/C++ Compiler 已停止工作",关闭弹窗后,编译输出的窗口中出现如下 ...
- 【原】webp图片牛刀小试
其实今年很早就有接触到webp图片的概念,只是一直没怎么弄.今天在一个小项目中小用了一番.总结总结 采用 what,why,how的方式来总结 what? 什么是webp图片? 维基百科: ...
随机推荐
- Jquery鼠标悬停按钮图标动态变化效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 移动端布局rem em
1.概念 em作为font-size的单位时,其代表父元素的字体大小,em作为其他属性单位时,代表自身字体大小 rem作用于非根元素时,相对于根元素字体大小:rem作用于根元素字体大小时,相对于其出初 ...
- 【bzoj2096】[Poi2010]Pilots 双指针法+STL-set
题目描述 Tz又耍畸形了!!他要当飞行员,他拿到了一个飞行员测试难度序列,他设定了一个难度差的最大值,在序列中他想找到一个最长的子串,任意两个难度差不会超过他设定的最大值.耍畸形一个人是不行的,于是他 ...
- P2165 [AHOI2009]飞行棋
题目描述 给出圆周上的若干个点,已知点与点之间的弧长,其值均为正整数,并依圆周顺序排列. 请找出这些点中有没有可以围成矩形的,并希望在最短时间内找出所有不重复矩形. 输入输出格式 输入格式: 第一行为 ...
- BZOJ1491 [NOI2007]社交网络 【floyd】
题目 在社交网络(socialnetwork)的研究中,我们常常使用图论概念去解释一些社会现象.不妨看这样的一个问题. 在一个社交圈子里有n个人,人与人之间有不同程度的关系.我们将这个关系网络对应到一 ...
- One-Way Streets (oneway)
One-Way Streets (oneway) 题目描述 Once upon a time there was a country with nn cities and mm bidirection ...
- 从jekyll转向hexo
当年选择jekyll是因为看中了HCZ Material theme这个主题,折腾了很久才把博客搭建好,后来周边人准备些博客的时候已经不推荐使用jekyll了,推荐hexo给好几个人,不用他们折腾,( ...
- Codevs 搜索刷题 集合篇
2919 选择题 时间限制: 1 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description 某同学考试,在N*M的答题卡上写了A,B,C,D四种答案. 他做完了 ...
- 洛谷 P1362 兔子数
题目描述 设 S(N ) 表示 N 的各位数字之和,如 S(484) = 4+8+4 = 16, S(22) = 2+2 = 4.如果一个正整数满足 S(x*x) = S(x) *S(x),我们称之为 ...
- css3动画、边框、投影知识
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...