如何用stm32cubemx freertos设置 FLASH读写配置

后使用快捷导航没有帐号?
查看: 1246|回复: 0
注册时间最后登录阅读权限60积分5225精华0帖子
状元, 积分 5225, 距离下一级还需 4775 积分
TA的每日心情开心昨天&16:56签到天数: 1265 天[LV.10]以坛为家III
试验目的:芯片采用F0芯片,通过配置SPI1完成W25X16的读写。片选CS为PA1,SCK为PB3,MISO为PB4,MOSI为PB5具体配置:
14:09 上传
14:08 上传
14:08 上传
程序分析:首先要读取W25X16的ID号,需要发送0x90,加2个伪数据+0x00。同时由于ID号为2个8位数据构成,并且ST的F0芯片的SPI是要读取时需要先写,所以定义uint8_t Data1[4] = {0x90,0x00,0x00,0x00}uint8_t Data2[2]= {0x00,0x00}uint8_t Rxdata[2];
然后主程序中使能SPI端口:HAL_SPI_MspInit(&hspi1);最后就是读取ID命令了,如下图此时Rxdata=0xEF14,这个就是W25X16的ID号。读取ID正确了,剩下的就是对Flash的操作了。
三周年铜板双倍!
总评分:&铜板 + 5&
站长推荐 /2
传统示波器单一的功能已无法满足现代新兴物联网产品的测试研发。针对这种情况,泰克推出了多合一的混合域示波器,一台仪器包含了示波器、频谱仪、矢量分析仪与逻辑分析仪等多种功能。既可以满足物联网设计的跨域测量调试需求,又能一机多用,节省了公司在测试仪器上的开支。
电鱼派是一款基于 ARM cortex_A8 内核的微型电脑主板,以 TF 卡为存储介质。主要应用于教育和工业应用评估用途。专为嵌入式爱好者和想学习基于 ARM 的应用处理器编程的人员设计。12月8日之前,爱板网免费为大家提供该板卡的申请试用机会。立即申请!
Powered by Discuz!STM32时钟分配及其解释-STM32cubeMX时钟设置
用时钟源来产生时钟!
在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。①、HSI是高速内部时钟,RC振荡器,频率为8MHz。
②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接
外部时钟源,频率范围为4MHz~16MHz。
③、LSI是低速内部时钟,RC振荡器,频率为40kHz。
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、
HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最
大不得超过72MHz。
其中40kHz的LSI(低速内部时钟)供独立看门狗IWDG使用,另外它还可以被选择为实时时钟RTC的时钟源。另外,实时时钟RTC的时钟源还可以选
择LSE(低速外部时钟),或者是HSE(高速外部时钟)的128分频。RTC的时钟源通过RTCSEL[1:0]来选择。
STM32中有一个全速功能的USB模块,其串行接口引擎需要一个频率为48MHz的时钟源。该时钟源只能从PLL输出端获取,可以选择为1.5分频或者
1分频,也就是,当需要使用USB模块时,PLL必须使能,并且时钟频率配置为48MHz或72MHz。()
另外,STM32还可以选择一个时钟信号输出到MCO脚(PA8)上,可以选择为PLL输出的2分频、HSI、HSE、或者系统时钟。
系统时钟SYSCLK最大频率为72MHz,它是供STM32中绝大部分部件工作的时钟源。系统时钟可由PLL、HSI或者HSE提供输出,并且它通过AHB分频器分频后送给各模块使用,AHB分频器可选择1、2、4、8、16、64、128、256、512分频。其中AHB分频器输出的时钟送给5大模块使用:①、送给AHB总线、内核、内存和DMA使用的HCLK时钟。
②、分频后送给STM32芯片的系统定时器时钟(Systick=Sysclk/8=9Mhz)
③、直接送给Cortex的自由运行时钟(free
running clock)FCLK。【ARMJISHU注:FCLK&为处理器的自由振荡的处理器时钟,用来采样中断和为调试模块计时。在处理器休眠时,通过FCLK&保证可以采样到中断和跟踪休眠事件。
Cortex-M3内核的“自由运行时钟(free running clock)”FCLK。“自由”表现在它不来自系统时钟HCLK,因此在系统时钟停止时FCLK&也继续运行。FCLK和HCLK
互相同步。FCLK&是一个自由振荡的HCLK。FCLK&和HCLK
应该互相平衡,保证进入Cortex-M3 时的延迟相同。】④、送给APB1分频器。APB1分频器可选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路送给定时器(Timer)2、3、4倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器2、3、4使用。
⑤、送给APB2分频器。APB2分频器可选择1、2、4、8、16分频,
其输出一路供APB2外设使用(PCLK2,最大频率72MHz),另一路送给定时器(Timer)1倍频器使用。该倍频器可选择1或者2倍频,时钟输出
供定时器1使用。另外,APB2分频器还有一路输出供ADC分频器使用,分频后送给ADC模块使用。ADC分频器可选择为2、4、6、8分频。
以上提到3种时钟Fclk、Hclk和Pclk,简单解释如下:Fclk为供给CPU内核的时钟信号,我们所说的cpu主频为XXXXMHz,就是指的这个时钟信号,相应的,1/Fclk即为cpu时钟周期;Hclk为优秀的高性能总线(AHB
bus peripherals)供给时钟信号(AHB为advanced high-performance
bus);HCLK
:AHB总线时钟,由系统时钟SYSCLK 分频得到,一般不分频,等于系统时钟,HCLK是高速外设时钟,是给外部设备的,比如内存,flash。Pclk为优秀的高性能外设总线(APB
bus peripherals)供给时钟信号(其中APB为advanced peripherals bus)。
在以上的时钟输出中,有很多是带使能控制的,例如AHB总线时钟、内核时钟、各种APB1外设、APB2外设等等。当需要使用某模块时,记得一定要先使能对应的时钟。
需要注意的是定时器的倍频器,当APB的分频为1时,它的倍频值为1,否则它的倍频值就为2。
连接在APB1(低速外设)上的设备有:电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、窗口看门狗、Timer2、Timer3、Timer4。
注意:USB模块虽然需要一个单独的48MHz时钟信号,但它应该不是供USB模块工作的时钟,而只是提供给串行接口引擎(SIE)使用的时钟。USB模块工作的时钟应该是由APB1提供的。
连接在APB2(高速外设)上的设备有:UART1、SPI1、Timer1、
ADC1、ADC2、所有普通IO口(PA~PE)、第二功能IO口。
[caption id="attachment_2541" align="alignnone" width="516"
caption="STM32的HCLK与FCLK关系图"][/caption]
下图是STM32用户手册中的时钟系统结构图(位于《STM32F103CDE_DS_CH_V5.pdf》的第14页,或者《STM32F10XXX参考手册_CN.pdf》的第47页),通过该图可以从
[caption id="attachment_2542" align="alignnone" width="847"
caption="STM32的时钟系统结构图"]
总体上掌握STM32的时钟系统。
已投稿到:1193人阅读
首先配置USB为Mass Storage Class,配置SDIO为 SD 4 bits wide bus。
这里我使用了FreeRTOS和FATFS,用不用和本例无关。有一个坑,就是SDIO的配置界面,MX软件建议不设分频,但这里需要慎重,SDIOCLK的分频要按照自己硬件板子的情况设置,我用的某型号开发板,如果用最高频率,会出现TF卡读写不稳定,设置一下分频才好。
设置完毕,生成代码和工程。打开工程,在usbd_storage_if.c文件里配置TF卡(SD卡)的基本IO操作。
在文件开头加入
#define BLOCK_SIZE
extern SD_HandleTypeD
extern HAL_SD_CardInfoTypedef SDCardI
注意!上面这三行就算写到USER CODE BEGIN... 和USER CODE END...的保护区里MX重新生成貌似也会被自动抹掉。
填充如下函数
int8_t STORAGE_GetCapacity_FS (uint8_t lun, uint32_t *block_num, uint16_t *block_size)
/* USER CODE BEGIN 3 */
HAL_SD_Get_CardInfo(&hsd, &SDCardInfo);
*block_num
= SDCardInfo.CardCapacity / BLOCK_SIZE;
*block_size = BLOCK_SIZE;
return (USBD_OK);
/* USER CODE END 3 */
int8_t STORAGE_Read_FS (uint8_t lun,
uint8_t *buf,
uint32_t blk_addr,
uint16_t blk_len)
/* USER CODE BEGIN 6 */
HAL_SD_ReadBlocks(&hsd, (uint32_t*)buf, (uint64_t)(blk_addr * BLOCK_SIZE), BLOCK_SIZE, blk_len);
return (USBD_OK);
/* USER CODE END 6 */
int8_t STORAGE_Write_FS (uint8_t lun,
uint8_t *buf,
uint32_t blk_addr,
uint16_t blk_len)
/* USER CODE BEGIN 7 */
HAL_SD_WriteBlocks(&hsd, (uint32_t*)buf, (uint64_t)(blk_addr * BLOCK_SIZE), BLOCK_SIZE, blk_len);
return (USBD_OK);
/* USER CODE END 7 */
还有一个需要注意的,就是生成的代码中sdio.c文件里有个问题需要手工改
void MX_SDIO_SD_Init(void)
hsd.Instance = SDIO;
hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
hsd.Init.BusWide = SDIO_BUS_WIDE_1B;
hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_ENABLE;
hsd.Init.ClockDiv = 2;
这里的hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_ENABLE;这句话生成出来的时候是disable的(然而在MX的图形界面中并没有发现怎么配置这段话),要人工改成enable,否则读写会不稳定。另,每一次MX重新生成,这里的enable又会被自动的改回去,老坑爹了。
到此,所有配置完成。
最后说下MX的另一个bug,就是使用FreeRTOS的时候HAL_Delay函数无法使用,最后发现原因是 stm32f1xx_it.c 文件中的SysTick_Handler
只加入了osSystickHandler()没加入HAL_IncTick(),把后者加入就好了。
MX的bug比教程还多。。。ST的攻城狮们可长点心吧。。。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2178次
排名:千里之外采用stm32cubemx进行SPI设置的方法 - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 6350|回复: 23
采用stm32cubemx进行SPI设置的方法
ST金币1175
在线时间130 小时
主题帖子精华
金牌会员, 积分 1684, 距离下一级还需 1316 积分
金牌会员, 积分 1684, 距离下一级还需 1316 积分
试验目的:芯片采用F0芯片,通过配置SPI1完成W25X16的读写。片选CS为PA1,SCK为PB3,MISO为PB4,MOSI为PB5具体配置:
捕获.JPG (41.01 KB, 下载次数: 9)
16:27 上传
捕获.JPG (43.53 KB, 下载次数: 3)
16:27 上传
由于没有使用中断和DMA,所以中断配置不选。
捕获.JPG (30.45 KB, 下载次数: 1)
16:28 上传
程序分析:首先要读取W25X16的ID号,需要发送0x90,加2个伪数据+0x00。同时由于ID号为2个8位数据构成,并且ST的F0芯片的SPI是要读取时需要先写,所以定义uint8_t Data1[4] = {0x90,0x00,0x00,0x00}uint8_t Data2[2]= {0x00,0x00}uint8_t Rxdata[2];
然后主程序中使能SPI端口:HAL_SPI_MspInit(&hspi1);最后就是读取ID命令了,如下图
捕获.JPG (41.13 KB, 下载次数: 12)
16:33 上传
此时Rxdata=0xEF14,这个就是W25X16的ID号。读取ID正确了,剩下的就是对Flash的操作了。
ST金币13758
在线时间1067 小时
主题帖子精华
ST金币1257
在线时间149 小时
主题帖子精华
金牌会员, 积分 2428, 距离下一级还需 572 积分
金牌会员, 积分 2428, 距离下一级还需 572 积分
我是这样做的:
unsigned char Data[6] = {0x90,0x00,0x00,0x00,0x00,0x00};
HAL_SPI_TransmitReceive(&hspi3, Data, Data, 6, 1000);
这样Data的后两个字节就是器件的ID号
ST金币1982
在线时间243 小时
主题帖子精华
论坛元老, 积分 3666, 距离下一级还需 9996333 积分
论坛元老, 积分 3666, 距离下一级还需 9996333 积分
在线时间11 小时
主题帖子精华
初级会员, 积分 72, 距离下一级还需 128 积分
初级会员, 积分 72, 距离下一级还需 128 积分
哥们,按你的方法我的还是ID都为0,可以把你的工程分享一下吗?我的邮箱
在线时间134 小时
主题帖子精华
金牌会员, 积分 1668, 距离下一级还需 1332 积分
金牌会员, 积分 1668, 距离下一级还需 1332 积分
1.png (948 Bytes, 下载次数: 0)
18:44 上传
1.png (948 Bytes, 下载次数: 0)
18:44 上传
在线时间22 小时
主题帖子精华
初级会员, 积分 188, 距离下一级还需 12 积分
初级会员, 积分 188, 距离下一级还需 12 积分
cube确实很方便,期待中文的cube库函数说明。
ST金币1233
在线时间129 小时
主题帖子精华
金牌会员, 积分 2834, 距离下一级还需 166 积分
金牌会员, 积分 2834, 距离下一级还需 166 积分
stm32.jpg (2.19 KB, 下载次数: 0)
08:17 上传
在线时间99 小时
主题帖子精华
金牌会员, 积分 1047, 距离下一级还需 1953 积分
金牌会员, 积分 1047, 距离下一级还需 1953 积分
好帖,谢谢分享。
(46.08 KB, 下载次数: 25)
09:31 上传
二十四节气~大雪
ST金币1175
在线时间130 小时
主题帖子精华
金牌会员, 积分 1684, 距离下一级还需 1316 积分
金牌会员, 积分 1684, 距离下一级还需 1316 积分
哥们,按你的方法我的还是ID都为0,可以把你的工程分享一下吗?我的邮箱
一般不应该是0,如果读不到,应该是FF
站长推荐 /3
为感谢大家的支持,社区提供10块官方最新STM32F769探索板,参与评测申请,有机会带回家!
首届STM32粉丝狂欢节9月12日闪亮登场,ST社区联合ST中文官网让您High不停!最高单人可得5块开发板!>>报名参加
ST将于12月在北京/上海/深圳三地分别举办针对以太网(Ethernet)应用实战的线下培训。请尽快报名!
Tel: 3-8056
备案号: 苏ICP备号-2
Powered bySTM32CUBEMX,最全面的STM32CUBEMX文章 - 电子工程世界网
STM32CUBEMX
在电子工程世界为您找到如下关于“STM32CUBEMX”的新闻
STM32CUBEMX资料下载
使用STM32CubeMX实现串口发送数据...
STM32CUBEMX相关帖子
Clang和LLVM的自行百度脑补)。
刚好手上有开发板,就测式下,这次选用的是NUCLEO-STM32F042的开发板,项目就随便开个项目(GPIO,USART)都可以。
使用STM32CubeMX生成基本的USART框架,就随便添加点代码。(不添加代码也是可以的)
配置编译器选项,分别选择V5.06 update4和V6.6。看了ARM官方文档,V5版本的已经停止开发,以后只维护。ARM...
本人接触stm32f 时间不长,在一个项目上使用了stm32f302rc这个芯片,初始化代码用的是STM32CubeMX生成的。ADC1、ADC2各有4路模拟输入。目前遇到的问题是ADC1采样正常,但ADC2采样不正常,输入0V时ADC2始终不为零,
大概有0.9V左右(3.3V基准)。这个问题已经困扰了几天了,还没有解决。求各位高人帮忙看看,如何解决。
以下是初始化代码...
STM32CubeMX生成MCU工程,简单3步连上云端,轻松打造物联网应用本篇教程将教会大家如何使用STM32CubeMX图形化配置工具生成MCU工程,然后只需编写几个简单的接口,即可将机智云自助生成的STM32方案工程里面的设备协议移植过来,真正实现全程图形化配置,傻瓜式开发,这样既可十分方便的将其它型号STM32微控制器连上机智云,开发智能产品。
STM32L432 Nucleo-32案例-3分钟打造手机...
本文以一个简单的手机APP远程空气质量监测应用为例,将教会大家如何使用STM32CubeMX图形化配置工具生成MCU工程,然后只需编写几个简单的接口,即可将机智云自助生成的STM32方案工程里面的设备协议移植过来,99%图形化自动完成,减少开发者工作量,这样可以十分方便的将其它型号STM32微控制器连上机智云,开发智能产品。本文的读者对象需要掌握的是:1.知道如何利用机智云自助开发生成MCU工程...
本帖最后由 dql2016 于
20:18 编辑
降低开发门槛一直是我们追求的目标,目前机智云自助生成的STM32方案工程采用的是STM32的标准库函数(又称STD库,对于STM32F103系列最新版本为V3.5),值得提出的是ST已不再更新STD标准库,主推HAL库,新出的F7,L4系列已不再支持STD库;HAL库配合强大的PC端图形化配置工具STM32CubeMX...
STM32F746 Discovery开发板试用学习基础上,评测F769IDISCOVERY开发板图形显示和音频播放等功能。
详细内同如下:
1.开发套件POE供电测试,通过示波器测试稳压效果
2.通过STM32CubeMx,学习F769时钟树和引脚分配
3.开发板上电,通过MDK测试官方AD例程、STemWin例程、MP3播放等例程
4.通过“emWin5.24模拟器”,测试图形显示...
STM32CubeMX PC软件开发工具还能让用户配置STM32微控制器,逐步引导用户生成适当的外设初始C代码。  每款STM32 Nucleo扩展板都配备免费的STM32Cube扩展软件,这些软件库通过高级API提供抽象的扩展板访问功能和应用例程,覆盖电机控制、低能耗蓝牙、NFC通信和传感器等功能。
  为了让开发人员更快地上手,STM32 ODE提供预集成多种应用软件的软件功能包。例如最近推出的...
前言USB作为从机设备时,管脚连接以及通讯的验证方法其实就是下载一段简单USB程序,在不需要任何驱动的前提下实现简单的USB通讯。通过这个简单程序的运行情况来判断USB管脚和通讯是否正常。
问题分析USB作为从机设备时,其硬件验证相对简单。当硬件工程师怀疑自己的硬件有问题时,就自己写一个简单的测试程序。但这对一般的硬件工程师来说还是有一定难度的。通过STM32CubeMX这个工具,这个过程就变...
值正常获取,
& && &我的疑惑在于:
& && && && &1、造成AD值不稳定的原因是什么?
& && && && &2、stm32cubemx生成的代码是不是存在问题?
STM32CUBEMX配置软件芯片生成C代码芯片配置BOOTMDK5自建第一个工程源码查看及编辑Source Insight软件使用开始文件分析 .s时钟配置,LED3灯闪烁uarst1串口——调试小技巧系统节拍SYSTICK——10微秒延时蜂鸣器——三极管和蜂鸣器类型芯片唯一ID读取——可以做加密使用循环冗余校验CRC——数据的福音ADC1、3模数转换,1秒钟取值一次RTC超强日历——功能非常强,农历新历...
STM32CUBEMX视频
STM32CUBEMX创意
你可能感兴趣的标签
热门资源推荐

我要回帖

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

 

随机推荐