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

【原创】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个回答
沐紫 回答时间: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/串口收发中断

谢谢
123下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版