mdk硬件仿真STM32 怎么查看当前系统时钟

mdk硬件仿真STM32 怎么查看当前系统时钟,第1张

1、首先打开mainc文件,在头写一个delay的延时方法,如下图。

2、然后在延时方法下面写出自定义设置系统时钟的方法,如下图。

3、然后就可以在入口程序中首先调用 设置系统时钟方法,传入对应的参数,先设置好系统时钟,然后再设置LED灯的点亮熄灭之间加入延时方法,如下图。

4、然后编译代码,下图中可以看出0错误,0警告,如下图。

5、编译成功之后,就可以将代码下载到STM32F407的开发板中观察实验现象了。

stm32单片机可以用Keil5、STM32CubeIDE、IAR等进行编程。

1、Keil MDK:Keil支持目前大多数单片机,Keil根据不同内核单片机,分为几个版本,最常用的就是Keil C51和MDK-ARM。像STC和一些51内核的单片机,一般用KeilC51版本,STM32则用的MDK-ARM。

2、STM32CubeIDE:STM32CubeIDE是ST公司推出的免费多功能STM32开发工具,可以说专门为STM32而生,新增了很多STM32专用功能,比如说外设图形化配置。为工程师大大提高开发效率,降低开发成本。

3、IAR:IAR我是在开发Ti蓝牙产品和基于STM8单片机会用到的。IAR也可以用来开发STM32的程序。通过IAR编译出来的程序比Keil优化得更好,最直接的体现就是编译出来的程序更节约内存空间。和上面Keil类似,IAR同样支持很多单片机,有很多功能基本两者都有。

STM32的介绍:

在STM32F105和STM32F107互连型系列微控制器之前,意法半导体已经推出STM32基本型系列、增强型系列、USB基本型系列、互补型系列;新系列产品沿用增强型系列的72MHz处理频率。

内存包括64KB到256KB闪存和20KB到64KB嵌入式SRAM。新系列采用LQFP64、LQFP100和LFBGA100三种封装,不同的封装保持引脚排列一致性,结合STM32平台的设计理念,开发人员通过选择产品可重新优化功能、存储器、性能和引脚数量,以最小的硬件变化来满足个性化的应用需求。

意法半导体(STMicroelectronics)整个集团共有员工近50000名,拥有16个先进的研发机构、39个设计和应用中心、15主要制造厂,并在36个国家设有78个销售办事处。


stm32f103从摄像头读取320240的图像,每秒可达10-15帧

stm32f407有个摄像头接口,从摄像头读取320240的图像,每秒可达30帧以上

解码wmv格式的视频,也比较流畅

下面是我的VS1003b_Init代码:
void My_VS1003b_Init()
{
u16 uReadVal = 0;
My_VS1003b_GPIOConfig();
My_SPI_Init(SPI1);
SPI_SetSpeed(SPI1,SPI_BaudRatePrescaler_16); //在模块为初始化之前SCLKI = 12MHZ,SPI允许的通信速率为SCLKI/6= 2MHZ
//SDI、SCI为SCLKI/4
// My_VS1003b_ExitConfig();
My_VS1003b_HardReset();
XDCS_H;
XCS_H;
My_TimeDelay(2);
My_VS1003b_WriteSCI(MODE,0x08,0x00);//软件复位,向0号寄存器写入0x0804 SM_SDINEW为1 SM_RESET为1 SM_DIFF为1环绕声
while(My_VS1003b_GetDREQState() == LOW);
My_VS1003b_WriteSCI(CLOCKF,0x98,0x00); //设置 VS1003 的时钟:例如SCI_CLOCKF=0x9800,向3号寄存器写入0x9800
//100 11 000 0000 0000 SC_MULT 为4 SC_ADD 为3 SC_FREQ为 0
// 设置完以后XTAIL不变,SCLKI = XTAILSC_MULT = 36MHZ,编解码速率 SCLKI15 = 48MHZ;
uReadVal = My_VS1003b_Read(CLOCKF);
uReadVal += 0 ;
// SPI_SetSpeed(SPI1,SPI_BaudRatePrescaler_8);
My_VS1003b_WriteSCI(AUDATA,0xBB,0x81); //设置 VS1003 的采样率:SPI_AUDATA=0xbb81,采样率 0xBB80 48k,0x0001立体声
uReadVal = My_VS1003b_Read(AUDATA);
uReadVal += 0 ;
My_VS1003b_WriteSCI(BASS,0x00,0x00); //SPI_BASS=0x0055,重音设置,向2号寄存器写入0x0055
//SB_AMPLITUDE=5 SB_FREQLIMIT=5 低于50Hz时进行5dB的增强
uReadVal = My_VS1003b_Read(BASS);
uReadVal += 0 ;
My_VS1003b_WriteSCI(VOL,VOL_VALUE,VOL_VALUE); //初始设置音量:SCI_VOL=0x2020 左右声道相同
// while(1)
// {
// uReadVal = My_VS1003b_Read(VOL);
// uReadVal += 0 ;
// }
// VS1003_ResetDecodeTime();
SPI_WriteByte(SPI1,0); //SDI测试
SPI_WriteByte(SPI1,0);
SPI_WriteByte(SPI1,0);
SPI_WriteByte(SPI1,0);
while(My_VS1003b_GetDREQState() == LOW);
VS1003_Sintest(5);
}
SPI初始化代码:
GPIO初始略过。。。
SPI_InitStructSPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructSPI_Mode = SPI_Mode_Master;
SPI_InitStructSPI_DataSize = SPI_DataSize_8b;
SPI_InitStructSPI_CPOL = SPI_CPOL_Low;
SPI_InitStructSPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructSPI_NSS = SPI_NSS_Soft;
SPI_InitStructSPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
SPI_InitStructSPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructSPI_CRCPolynomial = 7;
SPI_Cmd(pstSPIx,DISABLE);
SPI_Init(pstSPIx,&SPI_InitStruct);
SPI_Cmd(pstSPIx,ENABLE);
由于我的HCLK = 36MHZ,所以此处为16分频。。。。
这是我的100b 的 GPIO_Init代码:
void My_VS1003b_GPIOConfig()
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_InitStructGPIO_Pin = VS1003b_DREQ;
GPIO_InitStructGPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructGPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOC,&GPIO_InitStruct);
GPIO_InitStructGPIO_Pin = VS1003b_XDCS | VS1003b_XCS | VS1003b_RSET;
GPIO_InitStructGPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructGPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC,&GPIO_InitStruct);
}
1003b 读写模块函数:
u16 My_VS1003b_Read(u8 uAddress)
{
u16 uReturnVal = 0;
// while(My_VS1003b_GetXCSState() == HIGH);
My_VS1003b_SCIStart();
SPI_WriteByte(SPI1,VS1003b_Read);
SPI_WriteByte(SPI1,uAddress);
uReturnVal = (SPI_ReadWriteByte(SPI1,0xff) << 8);
uReturnVal |= SPI_ReadWriteByte(SPI1,0xff);
My_VS1003b_SCIStop();
return uReturnVal;
}
void My_VS1003b_WriteSDI(u8 uAddress,u8 uVal)
{
// while(My_VS1003b_GetXCSState() == HIGH);
My_VS1003b_SDIStart();
SPI_WriteByte(SPI1,VS1003b_Write);
SPI_WriteByte(SPI1,uAddress);
SPI_ReadWriteByte(SPI1,uVal % 0x100);
My_VS1003b_SDIStop();
My_TimeDelay(1);
}
void My_VS1003b_WriteSCI(u8 uAddress,u8 uHbyte,u8 uLbyte)
{
// while(My_VS1003b_GetXCSState() == HIGH);
My_VS1003b_SCIStart();
SPI_WriteByte(SPI1,VS1003b_Write);
SPI_WriteByte(SPI1,uAddress);
SPI_WriteByte(SPI1,uHbyte);
SPI_WriteByte(SPI1,uLbyte);
My_VS1003b_SCIStop();
My_TimeDelay(1);
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13386895.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-26
下一篇 2023-07-26

发表评论

登录后才能评论

评论列表(0条)

保存