sky-Hawk where 发表于 2012-10-30 21:21:24

STM32F0 #02进程帖(一)---LED闪灯和串口通信功能的实现

本帖最后由 fengye5340 于 2012-11-29 19:53 编辑

          STM32F0 #02进程一:
          自从收到了爱板网给的STM32F0小板后,就开始趁着休息时间鼓弄,呵呵。原来的小板已经送给朋友一块,给同事玩一块,好久没有摸它,感觉真是太陌生了。本人拿到这个小板后,面前做了三个方面的工作。
         第一个,给板子增加了一个8MHZ的外部晶振,以实现更精确的时钟和延时控制。 这个板子的器件都用0603的贴片,我们这里以0805最多,0603的型号不全,后来又去了库里才把上面的几个元件找全,真个费劲啊,焊的时间很短,还不够找一个器件的功夫。焊完后,用了程序一测,OK!高兴的我立马去吃饭了。
         第二个,利用SYSTICK定时器实现了豪秒级精确延时,目前仅用来 测试LED灯,后续,如果需要更精准的延时,会增加定时器模块。把程序下载进去后,小灯延时正确无误。
         第三个,增加了串口通信模块。这个是从偶的LM3S系列串口程序上移植过来的,虽说串口通信简单,不过STM32F0的串口API库还是有不少函数的,如果前期不阅读好******usart.c那个库文件,整明白里面的串口API函数,编写这个模块还是需要花费一点时间的。有的人会说,STM32不是有现成的串口模块嘛,我会说,这个还是有很多差别。毕竟M0是小弟弟,武器不可能比哥哥的好。还有就是串口模块的中断方式实现,这个需要先在 NVIC里面做个配置,然后在***_it.c 增加中断处理即可,中间只要处理正确,就可以实现了。
            下面把把图传上来!感谢爱板网论坛!
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
串口部分源码;
/*********************************Copyright (c)*********************************                                    
*                              fengye5340@163.com                     
******************************************************************************
* 文件名称:UART_51R8T6.C
* 描    述:串口通信模块
* 创 建 者: fengye5340
* 创建日期:
* 修 改 者:            
* 修改日期: 2012-10-29      
* 版    本: v1.0.0
******************************************************************************
* attention
*
******************************************************************************
*/
/*Includes --------------------------------------------------------------------*/
#include "stm32f0xx_usart.h"
#include"UART_51R8T6.H"
#include <stdarg.h>
#include <stdio.h>
/* 类型定义 typedef-----------------------------------------------------------*/
/* 预定义字符   ------------------------------------------------------------*/
/* 宏定义      -------------------------------------------------------------*/
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
/* 变量定义          ---------------------------------------------------------*/
/*******************************************************************************
* 函数名称: Uart_Init()
* 功能描述: 串口初始化
* 输入参数: void
* 返回参数: 无
********************************************************************************/
void Uart_Init(void)
{
   
      GPIO_InitTypeDefGPIO_InitStructure;
      USART_InitTypeDef USART_InitStructure;
               
      RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA, ENABLE);   // 使能GPIOB端口
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); // 使能串口1时钟
               
      GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);
      GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);      
/////////////////////////////////////////////////////////////////////////////////////      
      /*
      *USART1_TX -> PA9 , USART1_RX ->      PA10
      */                              
      GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9|GPIO_Pin_10;               
      GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF;
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
      GPIO_InitStructure.GPIO_PuPd= GPIO_PuPd_UP;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_Init(GPIOA, &GPIO_InitStructure);
/////////////////////////////////////////////////////////////////////////////////////
         
      USART_InitStructure.USART_BaudRate = 9600;                              //设置串口波特率
      USART_InitStructure.USART_WordLength = USART_WordLength_8b;             //设置数据位
      USART_InitStructure.USART_StopBits = USART_StopBits_1;                         //设置停止位
      USART_InitStructure.USART_Parity = USART_Parity_No;                            //设置效验位
      USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//设置流控制
      USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                //设置工作模式
      USART_Init(USART1, &USART_InitStructure);//串口配置
      
      USART_ITConfig(USART1, USART_IT_RXNE,ENABLE); //打开中断
   
      USART_Cmd(USART1, ENABLE);//使能串口1

}
/*******************************************************************************
* 函数名称: Uart_Put_Char()
* 功能描述: 通过UART发送一个字符
* 输入参数: void
* 返回参数: 无
********************************************************************************/
void Uart_Put_Char(unsigned char c)
{   
   while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
    USART_SendData(USART1,c);
   
   
}
/*******************************************************************************
* 函数名称:Uart_Put_string
* 功能描述: 通过UART发送字符串
* 输入参数: void
* 返回参数: 无
********************************************************************************/
void Uart_Put_string(unsigned char *s)
{
    while (*s != '\0')
    {
      Uart_Put_Char(*(s++));
    }
}
/*******************************************************************************
* 函数名称:Uart_Put_string
* 功能描述: 通过UART发送字符串
* 输入参数: void
* 返回参数: 无
********************************************************************************/
void Uart_Char_Num( unsigned char *pucBuffer, unsigned long ulCount )
{
   while(ulCount--)
    {
       Uart_Put_Char(*pucBuffer++);
    }
}
/*******************************************************************************
* 函数名称: Uart_Get_Char()
* 功能描述: 通过UART接收一个字符
* 输入参数: void
* 返回参数: 无
********************************************************************************/
unsigned char Uart_Get_Char(void)
{   
   unsigned char temp;
   while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);//等待接收为空
   temp = (unsigned char)(USART_ReceiveData(USART1));
   return(temp);   
}
/*******************************************************************************
函数名称:Display_ConfigMenu(void)
功    能:默认配置下的显示菜单
参    数:无
返回值:接收到的字符
********************************************************************************/
void Display_ConfigMenu(void)
{
   Uart_Put_string("---------STM32F0 DISCOVERY EVALUATION BOARD---------\r\n");
   Uart_Put_string("------------------EEboard爱板网论坛-----------------\r\n");
   Uart_Put_string("------------------ADC中断方式采集程序----——-------------\r\n");
    Uart_Put_string("------------------fengye5340@163.com----------------\r\n");
    Uart_Put_string("-------------------2012年11月22日--------------------\r\n");
}
/*******************************************************************************
函数名称:PUTCHAR_PROTOTYPE
功    能:串口实现Printf()函数功能
参    数:无
返回值:
********************************************************************************/
PUTCHAR_PROTOTYPE
{
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
USART_SendData(USART1,(uint8_t)ch);
return (ch);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
中断部分;
extern unsigned charg_inbuf1;   // 定义数据缓存器1--串口1缓冲器
/*******************************************************************************
* 函数名称: USART1_IRQHandler()
* 功能描述: 串口1中断处理函数
* 输入参数: void
* 返回参数: 无
* 说    明:可以随时用 USART_ITConfig(USART1, USART_IT_TXE, DISABLE);来关闭中断响应。
********************************************************************************/
void USART1_IRQHandler(void)
{   
   unsigned char uCh;
   while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);//等待接收为空
    uCh = (unsigned char)(USART_ReceiveData(USART1)); // 接收单个字符                  
   g_inbuf1 = uCh ;   
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
中断管理
/********************************************************************************
函数名称:NVIC_config(void)
功    能:NVIC配置
参    数:无
返 回 值:无
*********************************************************************************/
void NVIC_config(void)
{
/*1--串口中断管理*/
NVIC_InitTypeDefNVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

   
// 可以继续增加,设置中断优先级


}




yb2004-306806 发表于 2022-6-21 11:39:25


帮顶一下

sky-Hawk where 发表于 2015-2-1 11:51:34

:(没看见代码呢

outstanding1573 发表于 2014-2-9 11:58:28

:lol:lol:lol:lol   看过

相逢 发表于 2013-5-19 20:09:53

很高兴认识你们

fengye5340-2725 发表于 2013-5-18 19:27:10

相逢 发表于 2013-5-17 20:06 static/image/common/back.gif
正在学stm32

那就加油哦:P

相逢 发表于 2013-5-17 20:06:53

正在学stm32:)

sky-Hawk where 发表于 2013-1-4 20:26:30

楼主谦虚,这个只是些基本的程序,呵呵

sky-Hawk where 发表于 2013-1-4 20:05:17

lz很厉害啊

sky-Hawk where 发表于 2013-1-4 19:34:50

楼主太强大了,膜拜

sky-Hawk where 发表于 2012-11-30 08:09:43

fengye5340 发表于 2012-11-29 19:55 static/image/common/back.gif
已经把代码放到帖子里了

非常感谢!!!:handshake
页: [1] 2
查看完整版本: STM32F0 #02进程帖(一)---LED闪灯和串口通信功能的实现

Baidu
map