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

【原创】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扩展软件包
关注我们
st-img 微信公众号
st-img 手机版