STM32
直播中

笔画张

12年用户 1022经验值
私信 关注
[问答]

使用STM32F767芯片有哪些注意事项

STM32F767的ADC最大工作频率是多少?
主机和从机模式的区别在哪?

回帖(1)

李军林

2021-10-15 14:40:50
  1、STM32F767的ADC最大工作频率是36Mhz,而 ADC 时钟(ADCCLK)来自 APB2,APB2 频率一般是 108Mhz,我们设置 ADCPRE=01,即4 分频,这样得到 ADCCLK 频率为 27Mhz。
  2、FMC是STM32F429/439专有的,是在FSMC的基础上支持SDRAM的升级版本
  3、AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2》1,意思是APB2接高速设备;
  4、FSMC的三个配置寄存器:FSMC_BCRx(片选控制配置)、FSMC_BTRx(片选时序)(读写时序设置)、FSMC_BWTRx(片选写时序)(写时序设置)。
  5、STM32的FSMC有HADDR[27:0],其中[27:26]用来选择BANK区域的4个不同块。剩下的[25:0]则用来连接外部存储区域的地址线FSMC_A[25:0]。如果数据宽度是8bit,此时的HADDR[25:0]和FSMC_A[25:0]是完全对应的。如果数据宽度是16bit,此时的HADDR[25:1]和FSMC_A[24:0]是对应起来的。需要注意:无论数据宽度是多少,外部的FSMC_A[0]和外部设备地址A[0]总是对应的。
  6、HADDR[27:26]是不可手动配置的,当选择所在区后会自动赋值。
  7、为何FSMC可以用来驱动LCD,原因是FSMC的读写时序和LCD的读写时序很相似,于是把LCD当成一个外部存储器来用。利用FSMC在相应的地址读或写相关数值时,STM32的FSMC会在硬件上自动完成时序上的控制。所以我们只要设置好读写相关时序的寄存器后,FSMC就可以帮我们完成时序上的控制了。对于FSMC驱动LCD有一个比较难理解的地方就是当你的LCD使用16位宽度的数据传输(也就是有16条数据线,就像我上面说的我使用的是16位的80并口)的时候,HADDR和FSMC_A这个地址块的对应问题(使用8位数据则不用考虑此问题)。
  1)LCD_CS:LCD片选信号
  2)LCD_WR:LCD写信号
  3)LCD_RD:LCD读信号
  4)DB[17:1]:16位双向数据线
  5)LCD_RST:硬复位LCD信号
  6)LCD_RS:命令/数据标志(0:命令,1:数据)
  7)BL_CTR:背光控制信号
  8)T_MISO/T_MOSI/T_PEN/T_CS/T_CLK,触摸屏接口信号
  8、CPU中一个地址只能存储一个字节的数据,而当CPU通过地址线访问外部存储器的一个地址时,如果外部储存器的一个地址的数据刚好是八位时(即一个字节),访问一次就可接收过来;CPU为了解决这个问题,只能够再派一个地址去访问外部存储器的同一个地址,把剩下的那个字节也接收过来,之后再接着访问外部存储器的第二个地址,依此类推。。。在此过程中,CPU如果还是把地址线一对一地连接到外部存储器上,那就做不到让自己的第二个地址还继续访问同一个地址了。
  于是,人们帮了CPU一把,让它每一回访问时还是照旧把自己内部的地址按二进制拆分放到HADDR的0~25上(如下图)
  然后,到了FSMC_A一端,人们选择性地去掉HADDR[0],然后才把把剩余的25根依次接到FSMC_A上(人们之所以这么做,正是因为他们发现了一个规律,那就是,通过HADDR[1]是0还是1却正好能够区别外部存储器上的0地址和1地址,而通过HADDR[2]和HADDR[1]是10还是11又正好能够区别外部存储器上的2地址和3地址。。。依此类推,下一个就是通过HADDR[3]HADDR[2]和HADDR[1]一起来判断)
  最后,地址区分出来了,接收数据也就好说了,因为在CPU那边,它对人们把HADDR[0]不接到FSMC上是不知情的,所以,它还是照旧把地址逐次增一地去访问,也还是发出一个地址读回一个字节,但是它不知道的是,自己每发两个地址都会停留在外部存储器的同一个地址上,所以最终,同一个地址上的两个字节都会被CPU读走。。。
  9、在战舰上的引脚定义:
  LCD_CS:FSMC_NE4 PG12
  LCD_WR:FSMC_NWE PD5
  LCD_RD:FSMC_NOE PD4
  DB[15:0]:FSMC_D[15:0]
  LCD_RST:RESET
  LCD_RS:FSMC_A10 PG0
  BL_CTR:LCD_BL PB0
  在阿波罗上的引脚定义:
  LCD_CS:FMC_NE1 PD7
  LCD_WR:FSMC_NWE PD5
  LCD_RD:FSMC_NOE PD4
  DB[15:0]:FSMC_D[15:0]
  LCD_RST:RESET
  LCD_RS:FMC_A18 PD13
  BL_CTR:LCD_BL PB5
  10、当 APB1的时钟分频数为 1 的时候,TIM2~7 以及 TIM12~14 的时钟为 APB1 的时钟,而如果 APB1 的时钟分频数不为 1,那么 TIM2~7 以及 TIM12~14 的时钟频率将为 APB1 时钟的两倍;
  11、STM32 的通用 TIMx (TIM2~TIM5 和 TIM9~TIM14)定时器,高级定时器(TIM1和TIM8), 低功耗定时器(LPTIM1)
  12、主机和从机模式的区别就在于:
  主模式就是SPI主机,简单说就是提供SCK的那方。
  而从模式,就是被动接受SCK的那方。
  13、F7 FLASH
  容量高达 1 MB;
  256 位宽数据读取;
  字节、半字、字和双字数据写入;
  扇区擦除与全部擦除;
  14、USART_ClearFlag 清除完成标志位 USART_ClearITPendingBit清除中断标志位
  15、不要把 uart_init(115200);去掉,因为在 TPAD_Init 函数里面,我们有用到 printf,如果你去掉了 uart_init,就会导致 printf 无法执行,从而死机
  16、HSE 是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为 4MHz~26MHz。阿波罗 STM32F7 开发板接的是 25MHz 外部晶振。(外部晶振比内部晶振准确)
  17、keil中有些语句不能打断点: 将Optimization级别选择为default或者Level0/Level1级别,然后重新编译工程;
  18、共享资源异步访问时需要加信号量或者其他可以防止同时访问的情况。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分