你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F7学习第一次笔记--一些混杂知识点

[复制链接]
STMCU小助手 发布时间:2021-12-12 21:55
和F1的一点区别:
0 R$ q2 Y9 x. Y, S( A' m- `
: Q) d* a7 M2 n& W& J6 eGPIO_Initure.Alternate=GPIO_AF7_USART1;多了这么一个东西用来对复用端口进行复用功能选择,F1不用选择,刚看到目前还不知道为啥。
- p$ Y2 W0 L* s# h1 n7 _F7不支持位带操作
# @! S* C" L  h+ _* I. k0 d+ n! Q**
- [3 w, l1 E6 w) }7 c. E8 v& Z3 U
6 y0 y. G5 Y" g/ I  {767中断
" f0 z  g/ E- e1 k+ P- X7 s9 e& zCM7内核支持256个中断,767使用了118个,包括10个内核中断和108个可屏蔽中断。具有16级可编程中断优先级。
, Q: S5 c# F* t8 o2 f; I
20210113172219789.png

, o5 k& W3 w( z, C( U1 G( i, F5 o  {- i: G# y4 V2 @& _
ISER[8]:中断使能寄存器组,8个32位寄存器来控制CM7的256个中断,767自由ISER【0-3】有用,要使能某个中断,相应位置一$ C" i& ~! C. ]% _
ICER[8]:中断除能寄存器组,和ISER相反的功能。
( p* ~$ P1 W0 W( Y( tISPR[8]:中断挂起寄存器组,将对应位中断挂起,执行其他同级或高级中断。
+ i' W. ]! m8 L3 D  m5 I- `! b! Y$ VICPR[8]:中断解挂控制寄存器组:
4 x8 K3 V6 l& H+ }* y# DIABR[8]:中断激活标志位寄存器组:对应位为1表对应位中断正在执行,通过它判断正在执行的中断,硬件清零。
3 U# W* @" r4 Y0 `, e) k3 m! `IP[240]:中断优先级控制寄存器组:240个八位寄存器组,767用108个。IP【109】-IP【0】(98,97没用),每个可屏蔽中断的8bit用了高4位,分抢占优先级和子优先级。
, m+ t% G6 T+ z0 J) n4 T8 Q+ r" s6 E! k: W' [& f3 N
: d, I& ?- D# m9 I( Y1 Z: R; t# N
2021011317321818.png
, i; g# o# R$ X' J! L% b% g

  W% a0 o2 }, }5 D抢占优先级级别高于子优先级,数值低为高优先级。: L/ S( k( `2 T( `. ~

/ B$ I1 \" N  D. M* l8 _5 Y. I) d$ H& r" K7 r* [. x
SYSTEM文件夹4 p/ V, d1 K5 @
delay  a7 i$ ]8 G4 R

3 P; V  E& f1 G5 J$ j5 f7 b% O- z
20210113212421444.png

4 n7 t5 N9 N0 I4 `4 k/ @- o5 h& U使用SysTick定时器,24位倒计时,不占用中断和系统定时器。7 l1 W2 [' a9 W6 v. C% r( j
在ucos操作系统中,有SysTick提供时钟节拍,这个时钟一般不能打断。) W* U# d# K4 z% r8 I8 v8 ~
这里的延时只是抓取SysTick值得变化,不修改,所以不影响ucos时钟节拍。+ U; Q8 E5 u3 r7 A8 w6 [
8 K6 j, W- ^( N. K; U
20210113221828459.png
) C6 I! a/ o" {
" B8 A0 h- o  N! V# j
在这里插入图片描述这里delay_ostickspersec是用来设置os时钟节拍的,由注释可见时钟节拍最大为77.7ms,这里767的SYSCLK值为216,如果要设置时钟节拍为5ms则设置delay_ostickspersec值为200,216000000/200=1080000,每个值计时1/216us,1080000/216=5000,即为5ms的os时钟节拍。
1 Z" Y4 A  }  M4 g. Kreload*1000000计数值结束即为1s
1 E* ~7 s/ z+ A. l9 j8 i- b
( u- S$ g8 Y, @3 I; ~# d4 B& Ifac_ms值为os能延时的最小单位,比这个值小delay_ms就不会使用OS延时,而使用delay_us()来实现延时。如这里delay_ostickspersec值为200,fac_ms就为5# y# t$ a1 R  ~/ O
. Z% d  U! k0 f& N3 c, S7 @
Sys7 B1 x/ V' ^4 c  u

( Q- d! j0 _9 Q! U% T1 y
20210114124733452.png

( t) D1 W/ j, r3 _  M3 J# s; B' s
0 [4 ]/ C! c3 {( |开启数据cache和指令cache,并保证D-Cache和SRAM的数据保持同步刷新,防止数据不一致。
9 c/ X/ K3 O5 I: d% f" b% A这个文件还负责重命名一些类型以及初始化时钟
; M" B' B" c* Q3 v" ^6 A
% k( V$ M0 i. j; V+ k/ ~Usart
( E# J  F  e( q: i* j( o' Hprintf函数支持,如果要修改一般就修改相应的串口号。4 U9 D  M+ }# X6 ?6 m) X  m

9 G0 Q/ y% B6 i3 S+ m+ y6 kGPIO
$ C+ a& c. s- Y' d. c开漏模式可以读IO输入电平变化,此模式可以把端口作为双向IO使用。
$ b8 W: W& \" e# d5 [$ _# p2 P' l* r6 f; @& X& S2 K7 s9 h
HAL_GPIO_TogglePin();取反输出电平,内部是ODR寄存器的值决定输出电平。
5 V, n  I" c% c5 L: w8 V- ^2 n2 P; k4 H. x3 r
BSRR寄存器和ODR寄存器功能相似,低16位写1输出高电平,高16位写1输出低电平。( l9 x0 \9 J3 \& ?/ `' L9 I
HAL_GPIO_WritePin(GPIOx,GPIO_Pin,PinState);
% ~. _" T" I+ u$ l% W4 ]
$ q+ J7 M! C. E/ _) Y' aIDR寄存器用来读取GPIO口状态  z  A7 @% p' D2 p) s4 i* _* i
HAL_GPIO_ReadPin(GPIOx,GPIO_Pin);5 y3 K' _0 c4 X3 A
' f' E+ b8 M7 b2 I
5 t* A% w7 A& O5 z! B

) e& h# C* A5 e3 \
收藏 评论0 发布时间:2021-12-12 21:55

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版