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

【原创】STM32F0第一个工程,LED/串口收发中断

[复制链接]
abner88 发布时间:2014-3-11 22:34
    之前买的STM32F0Discovery开发板一直没用,前几天才开始折腾,记录下第一个工程吧。' z3 \; F' p" M3 Q% E
    玩过STM32F10xx,发现F0开发方式和F1很接近,F1很多代码稍作修改便可移植到F0上。8 g: o' L6 Q6 E
    基于IAR7.1建立工程。9 C1 x; Q  Y3 c" H9 _2 c& g' G! O
 
  R( C% |: ~, }  |# N) O% @
  P8 p/ L% j5 v' N 8 i8 Y9 p8 J, ^
 " G1 j5 f0 o; u" t% X' D
   x' a+ r5 u0 ~: j- X8 t7 x

# a  X& \0 ?3 y' @/ Z5 j、、串口初始化8 z7 |5 H# E# u
 
- W+ r- R$ \7 e1 j1 g* X' i3 [* pvoid Usart_Config(uint16_t Usart_BaudRate)9 N9 H# Y# Z* K/ W
{3 M" ]" a5 P" ]& Y/ g- _. R2 [
  NVIC_InitTypeDef  NVIC_InitStructure; . a. s+ y: S9 M( g/ {8 s8 M
  GPIO_InitTypeDef  GPIO_InitStructure;, u9 E* @+ }1 U# ~/ J  L
  USART_InitTypeDef USART_InitStructure; / W2 x# W. E: ]% h2 Y7 _: @2 [
  / e, E: h" f" L# {
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);   //enable clock of GPIOA
5 X% n; H4 }7 G0 a* F7 }  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //enable clock of USART1
8 o' p3 W. e. N; Q( [ 
) d3 q- r! `9 w! L. m" m  /* Configure USART Tx as alternate function push-pull */4 V3 ]& ?* L2 h1 K+ H$ d
  GPIO_InitStructure.GPIO_Pin       =   GPIO_Pin_9 | GPIO_Pin_10;  z3 m; q8 e# E, M
  GPIO_InitStructure.GPIO_Mode      =   GPIO_Mode_AF;
: ^+ C5 g0 R' A8 ~  GPIO_InitStructure.GPIO_Speed     =   GPIO_Speed_50MHz;
* B5 }# T% E3 R' G6 p. ~5 T  GPIO_InitStructure.GPIO_OType     =   GPIO_OType_PP;
: [9 X, I" Z$ [1 m! g4 s, V; y$ ~  GPIO_InitStructure.GPIO_PuPd      =   GPIO_PuPd_UP;
" D) D5 K' n; S1 ~2 u+ Z9 D  GPIO_Init(GPIOA, &GPIO_InitStructure);: c& |8 z6 f7 H# D8 C3 ]
 
) n" D) q& [: Y& H  GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);//PA9 as Usart1_TX% A9 C6 h1 K5 ^, U$ `
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);//PA10 as Usart1_RX

+ |2 T- l, b! T; ?% m! {( l8 {  1 E3 N* W3 L) j+ l1 o
  USART_InitStructure.USART_BaudRate          =   Usart_BaudRate;
/ ~0 {3 P" F  v0 D" W  USART_InitStructure.USART_WordLength        =   USART_WordLength_8b;' j* {% H. p6 U* `7 L
  USART_InitStructure.USART_StopBits          =   USART_StopBits_1;+ ~  h9 i4 y+ b- o% {4 f/ k
  USART_InitStructure.USART_Parity            =   USART_Parity_No;
" U, Q. D& U: {. J1 q$ {  USART_InitStructure.USART_Mode              =   USART_Mode_Rx | USART_Mode_Tx;
9 S& k' K  M# n' P  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;" O2 P( F$ w  i6 r( v
  USART_Init(USART1,&USART_InitStructure);, x/ k" d9 k) R% O- t4 p
 
5 g# h0 F* m1 g3 L  J  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;- ~2 x; I! \7 P0 v, E# O% }
  NVIC_InitStructure.NVIC_IRQChannelPriority = 1;
0 Q  a: r& B& V) D( k2 L  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;) V$ t9 G# @- {4 j5 m
  NVIC_Init(&NVIC_InitStructure);
  |. \% u. Z0 g' }: Z+ s4 Q& {, I$ \
#if USART_RXNE_INTERRUPT     
  d9 S; R$ {* i! n  USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);  ~/ B3 R6 j. Y& P$ G2 R
#endif
- q- ?  O( `* g4 o* n
1 _; Z3 p2 G& `. N1 g
  USART_Cmd(USART1, ENABLE);//enable USART1
' n+ [7 I+ U5 e# o. s- a  9 z: d, {5 U: d
#if USART_TC_INTERRUPT       
% }5 r8 l) @6 E( X  D, E  USART_ClearFlag(USART1,USART_FLAG_TC);   % W7 j9 Y2 b2 E% m# }: B
  USART_ITConfig(USART1,USART_IT_TC,ENABLE);
# Y8 [9 r: W! g) P0 {#endif
* f; W+ X: {* E1 j& r+ M7 X9 Z0 g
}
4 {7 B% C) J/ i3 b3 l    在做GPIO复用功能映射的时候,第二个参数不要习惯性的写成GPIO_Pin_9,红色部分代码
% t7 J: X! ^2 a8 @    为方便代码裁剪,使用宏定义来控制。因为使能中断的时候会自动发送一个空闲帧,TC中断标志位会置位,所以TC中断开启的操作应当放在串口使能操作之后,并且开启TC中断之前应当清除一次TC中断标志位,否则一旦串口初始化完毕,就会进入TC中断。如上蓝色部分代码。  x0 n9 d5 |- a9 k
 
4 H8 r6 [0 \. A! `1 K 
# Y& @. U7 v* t" c2 m
- Z0 G0 r$ U1 Q( P- X" q. s- C、、发送字节1 [/ V( ~4 h2 T3 O2 b) z( }
 
- G$ a* e4 b; ^' J/ L( gvoid Usart_TxByte(uint8_t dat)- `! T, F$ \0 s' q
{7 Z4 T, M5 \; H8 K& O4 M" X
  USART_SendData(USART1,dat);
! `" V3 N  f+ n7 ?  while (USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);//wait untill transmitt complete
  L9 R) E1 S( F}
; u, i( j6 s" K. y& f( z$ v 9 h" |9 {! o4 Q  \) y: x
 , k; N3 p$ C# r7 j1 K
! l1 o) u: ^; a+ Q2 o9 G3 |- ^
、、发送字符串$ x, e4 l1 N1 y# V
 
. ^( s+ ?  X/ o0 L6 T  U0 `void Usart_TxString(uint8_t *string)
7 I& L* k  Z; c4 u3 g: }{
% [2 G' a; c; ]( T  while(*string != '\0')
: M3 G; P/ {) z    Usart_TxByte(*string++);
0 N% u& |( _$ \& F}
  K0 k( G4 s& H' w& @5 p1 d+ r 
- ?  X  X+ d( ]1 B. G. V 
& ]7 s; T  S+ M% | & F( _) V# {$ z
、、中断服务函数
2 ~# s: D2 g3 [9 l& O 
5 ~& G# ~+ z8 L; l& Y2 k  w( H6 ^6 H
3 N! W. ]2 D# H' G( Z! x% O# G* R* T<span style="font-size: small;">void USART1_IRQHandler(void)
5 ~1 h! d" O" ^$ l$ K# w{0 H7 Q0 {, j. N4 y3 {; i
  static uint8_t n = 0;5 g, l4 K9 \4 u1 C- r5 W  a. k5 P* o9 y
  + H! |5 w; H0 ~: s4 a* h
  if(USART_GetFlagStatus(USART1,USART_FLAG_ORE))    //ORE interrupt- l! y. x- M) d  t1 _9 a
    USART1->ICR |= 1

01--USART.rar

下载

300.04 KB, 下载次数: 528

评分

参与人数 1 ST金币 +8 收起 理由
奥丁泰尔 + 8

查看全部评分

收藏 评论23 发布时间:2014-3-11 22:34

举报

23个回答
fansanderen 回答时间:2018-5-11 16:26:28
楼主你好,我用这个例程在中断一直报if(USART_GetFlagStatus(USART1,USART_FLAG_ORE))        //溢出中断4 W; s3 p2 \- m# Y. A$ w4 S
    USART1->ICR |= 1 << 3;// USART_ReceiveData(USART1);这里一直执行,不知道能否解决?
dearfar 回答时间:2016-1-29 16:09:21
谢谢楼主,有用处
zui135-124601 回答时间:2015-1-7 11:08:12
有用,好东西.........................
沐紫 回答时间:2014-3-17 19:54:24

RE:【原创】STM32F0第一个工程,LED/串口收发中断

支持!
kakashi2010 回答时间:2014-3-19 00:53:42

RE:【原创】STM32F0第一个工程,LED/串口收发中断

谢谢楼主,看看吧。
bn777_mcu 回答时间:2014-3-19 08:10:51

RE:【原创】STM32F0第一个工程,LED/串口收发中断

看看
lillian-368088 回答时间:2014-3-19 08:57:32

RE:【原创】STM32F0第一个工程,LED/串口收发中断

谢谢楼主· ·· 看看
lillian-368088 回答时间:2014-3-19 08:57:47

RE:【原创】STM32F0第一个工程,LED/串口收发中断

谢谢楼主
abner88 回答时间:2014-3-20 09:48:26

回复:【原创】STM32F0第一个工程,LED/串口收发中断

回复第 2 楼 于2014-03-17 19:54:24发表:
, g# x6 p, n& T: C# |  \$ w- k支持!
  `7 E8 ~# e, G7 } 第一次在论坛发帖,感谢管理员支持
wangjuneric 回答时间:2014-3-20 14:44:10

回复:【原创】STM32F0第一个工程,LED/串口收发中断

学习学习
q2459451851 回答时间:2014-3-25 16:15:06

回复:【原创】STM32F0第一个工程,LED/串口收发中断

恩恩,嘿嘿
w627255898 回答时间:2014-4-19 11:59:04

回复:【原创】STM32F0第一个工程,LED/串口收发中断

谢谢
jerry9203 回答时间:2014-5-2 13:52:17

回复:【原创】STM32F0第一个工程,LED/串口收发中断

junliangdt 回答时间:2014-5-3 14:40:10

RE:【原创】STM32F0第一个工程,LED/串口收发中断

绝对支持,下了,学习
kenneth19800322 回答时间:2014-6-23 09:39:39

回复:【原创】STM32F0第一个工程,LED/串口收发中断

Thank you very much for your sharing.
自由人-379179 回答时间:2014-8-16 17:28:44

回复:【原创】STM32F0第一个工程,LED/串口收发中断

学习一下 好像 F0的串口中断和STM32F1的中断标志清除方式不一样
◆Flyzym◆ 回答时间:2014-8-17 11:51:03

RE:【原创】STM32F0第一个工程,LED/串口收发中断

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