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

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

[复制链接]
abner88 发布时间:2014-3-11 22:34
    之前买的STM32F0Discovery开发板一直没用,前几天才开始折腾,记录下第一个工程吧。
    玩过STM32F10xx,发现F0开发方式和F1很接近,F1很多代码稍作修改便可移植到F0上。
    基于IAR7.1建立工程。
 

 
 
 

、、串口初始化
 
void Usart_Config(uint16_t Usart_BaudRate)
{
  NVIC_InitTypeDef  NVIC_InitStructure;
  GPIO_InitTypeDef  GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;
 
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);   //enable clock of GPIOA
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //enable clock of USART1
 
  /* Configure USART Tx as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin       =   GPIO_Pin_9 | GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode      =   GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed     =   GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType     =   GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd      =   GPIO_PuPd_UP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
 
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);//PA9 as Usart1_TX
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);//PA10 as Usart1_RX

 
  USART_InitStructure.USART_BaudRate          =   Usart_BaudRate;
  USART_InitStructure.USART_WordLength        =   USART_WordLength_8b;
  USART_InitStructure.USART_StopBits          =   USART_StopBits_1;
  USART_InitStructure.USART_Parity            =   USART_Parity_No;
  USART_InitStructure.USART_Mode              =   USART_Mode_Rx | USART_Mode_Tx;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_Init(USART1,&USART_InitStructure);
 
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

#if USART_RXNE_INTERRUPT     
  USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
#endif

  USART_Cmd(USART1, ENABLE);//enable USART1
 
#if USART_TC_INTERRUPT       
  USART_ClearFlag(USART1,USART_FLAG_TC);  
  USART_ITConfig(USART1,USART_IT_TC,ENABLE);
#endif

}
    在做GPIO复用功能映射的时候,第二个参数不要习惯性的写成GPIO_Pin_9,红色部分代码
    为方便代码裁剪,使用宏定义来控制。因为使能中断的时候会自动发送一个空闲帧,TC中断标志位会置位,所以TC中断开启的操作应当放在串口使能操作之后,并且开启TC中断之前应当清除一次TC中断标志位,否则一旦串口初始化完毕,就会进入TC中断。如上蓝色部分代码。
 
 

、、发送字节
 
void Usart_TxByte(uint8_t dat)
{
  USART_SendData(USART1,dat);
  while (USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);//wait untill transmitt complete
}
 
 

、、发送字符串
 
void Usart_TxString(uint8_t *string)
{
  while(*string != '\0')
    Usart_TxByte(*string++);
}
 
 

、、中断服务函数
 

<span style="font-size: small;">void USART1_IRQHandler(void)
{
  static uint8_t n = 0;
 
  if(USART_GetFlagStatus(USART1,USART_FLAG_ORE))    //ORE interrupt
    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))        //溢出中断
    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发表:
支持!
 第一次在论坛发帖,感谢管理员支持
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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版