八、printf

一、調用頭文件stdio.h, 而後重定義printf函數,以下: electron

1 int fputc(int ch,FILE *F)
2 {
3     
4     USART_SendData(USART1,(u8)ch);
5     
6     while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待發送完成,判斷標誌位
7     
8     return ch;
9 }
View Code

 


二、例程以下:ide

  1 /*************************************************************************************************************************************
  2 *  
  3 *  文件名稱:main.c
  4 *  文件功能:主函數文件
  5 *
  6 ***************************************************************************************************************************************/
  7 
  8 #include "pbdata.h"//調用自定義公共函數庫
  9 
 10 
 11 /*********************************************************************************
 12 *
 13 * 初始化操做
 14 *
 15 *********************************************************************************/
 16 void RCC_Configuration(void);//系統時鐘初始化函數聲明
 17 void GPIO_Configuration(void);//GPIO初始化函數聲明
 18 void NVIC_Configuration(void);//中斷優先級配置函數聲明
 19 void USART_Configuration(void);//串口配置函數聲明
 20 
 21 
 22 
 23 
 24 /********************************************************************************
 25 *
 26 *  函數名稱:main(void)
 27 *  函數功能:主函數
 28 *  函數說明:不能用void定義主函數
 29 *
 30 ********************************************************************************/
 31 int main(void)//void不能void定義主函數
 32 {
 33         
 34     RCC_Configuration();    //系統時鐘初始化
 35     
 36     GPIO_Configuration();//端口初始化
 37     
 38     USART_Configuration();//串口配置
 39     
 40     NVIC_Configuration();//中斷優先級配置
 41     
 42     
 43     
 44     while(1)
 45     {
 46         printf("liubo\n");
 47         
 48         delay_ms(3000);
 49     }
 50     
 51 }
 52     
 53     
 54 
 55 
 56 /********************************************************************************
 57 *
 58 *  函數名稱:RCC_Configuration(void)
 59 *  函數功能:系統時鐘高初始化函數
 60 *
 61 ********************************************************************************/
 62     void RCC_Configuration(void)//系統時鐘高初始化函數
 63   {
 64         
 65     SystemInit();//系統初始化
 66     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//串口對應GPIO時鐘使能
 67         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//串口時鐘使能
 68         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//引腳複用
 69 
 70     }
 71     
 72     
 73 
 74 /*******************************************************************************
 75 *
 76 * 函數名稱:GPIO_Configuration(void)
 77 * 函數功能:GPIO初始化函數
 78 *
 79 ********************************************************************************/    
 80     
 81     void GPIO_Configuration(void)//GPIO初始化函數
 82   {
 83               
 84         
 85 /*串口引腳配置*/
 86         GPIO_InitTypeDef GPIO_InitStructure;//定義一個GPIO設置的結構體變量
 87 
 88 /*輸出引腳配置*/        
 89         /*結構體變量賦值*/
 90       GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;////引腳配置TX
 91       GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//配置頻率
 92         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//發送要配置成複用推輓輸出
 93         /*對應的GPIO初始化*/
 94       GPIO_Init(GPIOA,&GPIO_InitStructure);
 95         
 96     
 97 /*輸入引腳配置*/        
 98         /*結構體變量賦值*/
 99       GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;////引腳配置RX
100         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//接收引腳配置成浮空輸入
101         /*對應的GPIO初始化*/
102       GPIO_Init(GPIOA,&GPIO_InitStructure);        
103 
104         
105   }
106     
107 
108 /****************************************************************************
109 *
110 *  函數名稱:NVIC_Configuration(void)
111 *  函數功能:配置中斷優先級
112 *
113 ****************************************************************************/
114     
115 void NVIC_Configuration(void)
116 {
117   NVIC_InitTypeDef NVIC_InitStructure; //定義一個優先級配置結構體變量
118     
119   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//分組
120 
121   NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
122   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//搶斷優先級
123   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//響應優先級
124   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
125     
126   NVIC_Init(&NVIC_InitStructure);//初始化
127 }
128     
129 
130 /*********************************************************************************
131 *
132 *  函數名稱:
133 *  函數功能:串口配置函數
134 *
135 *********************************************************************************/
136 void USART_Configuration(void)
137 {
138 /*定義串口配置結構體變量*/
139         USART_InitTypeDef USART_InitStructure;//定義一個串口配置結構體變量
140     
141     
142 /*結構體變量賦值*/
143     USART_InitStructure.USART_BaudRate = 9600;//波特率9600
144     USART_InitStructure.USART_WordLength = USART_WordLength_8b;//位寬,8位
145     USART_InitStructure.USART_StopBits = USART_StopBits_1;//中止位1
146     USART_InitStructure.USART_Parity = USART_Parity_No;//不奇偶校驗
147     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//流控禁止
148     USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;//發送使能
149 
150     
151 /*發送串口配置初始化*/
152     USART_Init(USART1, &USART_InitStructure);
153     
154 
155 /*打開串口接收中斷*/
156       USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//當接收到數據時,會產生中斷
157     
158     
159 /*打開串口*/
160     USART_Cmd(USART1,ENABLE);//串口使能,打開
161         
162 /*清空中斷標誌位*/
163     USART_ClearFlag(USART1,USART_FLAG_TC);
164 }
165     
166     
167     
168     
169     
170 
171     
172     
173 
174     
175 
176     
177     
178     
179     
180     
181     
182     
183     
184     
185     
186     
187     
188     
189     
190     
191     
192     
193     
194     
195     
196     
197     
198     
199     
200     
View Code
  1 /**
  2   ******************************************************************************
  3   * @file GPIO/IOToggle/stm32f10x_it.c 
  4   * @author  MCD Application Team
  5   * @version  V3.0.0
  6   * @date  04/06/2009
  7   * @brief  Main Interrupt Service Routines.
  8   *         This file provides template for all exceptions handler and 
  9   *         peripherals interrupt service routine.
 10   ******************************************************************************
 11   * @copy
 12   *
 13   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 14   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 15   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 16   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 17   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 18   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 19   *
 20   * <h2><center>&copy; COPYRIGHT 2009 STMicroelectronics</center></h2>
 21   */
 22 
 23 /* Includes ------------------------------------------------------------------*/
 24 #include "stm32f10x_it.h"     
 25 #include "stm32f10x_exti.h"
 26 #include "stm32f10x_rcc.h"
 27 #include "stm32f10x_tim.h"
 28 #include "misc.h"
 29 #include "pbdata.h"
 30 
 31 void NMI_Handler(void)
 32 {
 33 }
 34 
 35 
 36 
 37 /**
 38   * @brief  This function handles Hard Fault exception.
 39   * @param  None
 40   * @retval : None
 41   */
 42 void HardFault_Handler(void)
 43 {
 44   /* Go to infinite loop when Hard Fault exception occurs */
 45   while (1)
 46   {
 47   }
 48 }
 49 
 50 /**
 51   * @brief  This function handles Memory Manage exception.
 52   * @param  None
 53   * @retval : None
 54   */
 55 void MemManage_Handler(void)
 56 {
 57   /* Go to infinite loop when Memory Manage exception occurs */
 58   while (1)
 59   {
 60   }
 61 }
 62 
 63 /**
 64   * @brief  This function handles Bus Fault exception.
 65   * @param  None
 66   * @retval : None
 67   */
 68 void BusFault_Handler(void)
 69 {
 70   /* Go to infinite loop when Bus Fault exception occurs */
 71   while (1)
 72   {
 73   }
 74 }
 75 
 76 /**
 77   * @brief  This function handles Usage Fault exception.
 78   * @param  None
 79   * @retval : None
 80   */
 81 void UsageFault_Handler(void)
 82 {
 83   /* Go to infinite loop when Usage Fault exception occurs */
 84   while (1)
 85   {
 86   }
 87 }
 88 
 89 /**
 90   * @brief  This function handles SVCall exception.
 91   * @param  None
 92   * @retval : None
 93   */
 94 void SVC_Handler(void)
 95 {
 96 }
 97 
 98 /**
 99   * @brief  This function handles Debug Monitor exception.
100   * @param  None
101   * @retval : None
102   */
103 void DebugMon_Handler(void)
104 {
105 }
106 
107 /**
108   * @brief  This function handles PendSV_Handler exception.
109   * @param  None
110   * @retval : None
111   */
112 void PendSV_Handler(void)
113 {
114 }
115 
116 /**
117   * @brief  This function handles SysTick Handler.
118   * @param  None
119   * @retval : None
120   */
121 void SysTick_Handler(void)
122 {
123 }
124 
125 
126 
127 /****************************************************************************
128 *
129 * 函數名稱:void TIM3_IRQHandler(void)
130 * 外部中斷處理函數
131 *
132 ****************************************************************************/
133 
134 
135 void TIM3_IRQHandler(void)
136 {
137     TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
138 
139     if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==Bit_RESET)
140     {
141         if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)==Bit_RESET)
142         {
143             //LED 熄滅
144            GPIO_SetBits(GPIOB,GPIO_Pin_5);    
145         }
146         else
147         {
148            //LED 發光
149            GPIO_ResetBits(GPIOB,GPIO_Pin_5);
150         }
151     }
152 
153 }
154 
155 
156 
157 
158 /****************************************************************************
159 *
160 * 函數名稱:void EXTI9_5_IRQHandler(void)
161 * 外部中斷處理函數
162 *
163 ****************************************************************************/
164 void EXTI9_5_IRQHandler(void)
165 {
166   if(EXTI_GetITStatus(EXTI_Line5)==SET)  //判斷是否產生了中斷
167   {
168        EXTI_ClearITPendingBit(EXTI_Line5);//中斷清除
169 
170       delay_ms(10);//延時消抖
171 
172       if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==Bit_RESET) //再次判斷,消抖
173       {
174           if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)==Bit_RESET)//若是LED是亮
175           {
176            GPIO_SetBits(GPIOB,GPIO_Pin_5);    //則熄滅
177           }
178           else
179           {
180               GPIO_ResetBits(GPIOB,GPIO_Pin_5);//若是是熄滅的,就亮
181           }
182       }
183   }    
184 }
185 
186 
187 
188 
189 
190 
191 
192 
193 
194 /****************************************************************************
195 * Ļ    Ԇúvoid EXTI1_IRQHandler(void)
196 * ٦    ŜúEXTI2א׏ԦmԌѲ
197 * ɫࠚӎ˽úϞ
198 * Զࠚӎ˽úϞ
199 * ˵    ķú
200 * ַԃ׽רúϞ 
201 ****************************************************************************/
202 void EXTI1_IRQHandler(void)
203 {
204     
205 }
206 
207 /****************************************************************************
208 * Ļ    Ԇúvoid EXTI2_IRQHandler(void)
209 * ٦    ŜúEXTI2א׏ԦmԌѲ
210 * ɫࠚӎ˽úϞ
211 * Զࠚӎ˽úϞ
212 * ˵    ķú
213 * ַԃ׽רúϞ 
214 ****************************************************************************/
215 void EXTI2_IRQHandler(void)
216 {
217     
218 }
219 
220 /****************************************************************************
221 *
222 * 函數名稱:void EXTI3_IRQHandler(void)
223 * 函數功能:外部中斷XTI3中斷處理函數
224 * 
225 ****************************************************************************/
226 void EXTI3_IRQHandler(void)
227 {
228 
229      
230 }
231 
232 
233 /****************************************************************************
234 *
235 * 函數名稱:USART1_IRQHandler(void)
236 * 函數功能:串口中斷1處理函數
237 * 
238 ****************************************************************************/
239 void USART1_IRQHandler(void)
240 {
241     
242      if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)//判斷是否發生了串口中斷
243      {
244          
245          USART_SendData(USART1,USART_ReceiveData(USART1));//從串口中讀取數據,而後發送出去
246          
247          while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待發送完成,判斷標誌位
248          
249      }
250  }
View Code
/****************************************************************************************************************
*
* 文件名稱:pbdata.c
* 文件功能:自定義函數或者全局變量的初始化
*
****************************************************************************************************************/

/*頭文件聲明*/
#include "pbdata.h"




/********************************************************************************************
*
* 自定義全局變量
*
********************************************************************************************/
u8 dt=0;





/******************************************************************************************
*
* 自定義函數
*
******************************************************************************************/



/**************************************************
*
*  函數名稱:delay_us(u32 nus)
*  函數功能:微秒延時函數
*  輸入參數:輸入值爲延時us
*
***************************************************/
void delay_us(u32 nus)
{
    u32 temp;
    SysTick->LOAD = 9*nus;//載入初值,72M/8=9M,也就是1/9us,9*1/9us,因此是執行9次
    SysTick->VAL=0X00;//清空計數器,清空後,就自動設置本身設定的計數器的值
    SysTick->CTRL=0X01;//使能,減到零動做(不發生中斷),採用外部時鐘
    
    do
    {
          temp=SysTick->CTRL;//標誌位,等到一直減到0
         }while((temp&0x01)&&(!(temp&(1<<16))));//等待時間到達
    
    SysTick->CTRL=0x00; //關閉計數器
    SysTick->VAL =0X00; //清空計數器
}







/***************************************************
*
* 函數名稱:delay_ms(u16 nms)
* 函數功能:毫秒級延時
* 輸入參數:輸入值位延時ms
*
****************************************************/
void delay_ms(u16 nms)
{
    u32 temp;
    SysTick->LOAD = 9000*nms;//載入初值,72M/8=9M,也就是1/9us,9*1/9us,因此是執行9000次
    SysTick->VAL=0X00;//清空計數器,清空後,就自動設置本身設定的計數器的值
    SysTick->CTRL=0X01;//使能,減到零動做(不發生中斷),採用外部時鐘
    
    do
    {
          temp=SysTick->CTRL;//標誌位,等到一直減到0
         }while((temp&0x01)&&(!(temp&(1<<16))));//等待時間到達
    
    SysTick->CTRL=0x00; //關閉計數器
    SysTick->VAL =0X00; //清空計數器
}



/****************************************************
*
* 重定義printf函數部分
*
****************************************************/
int fputc(int ch,FILE *F)
{
    
    USART_SendData(USART1,(u8)ch);
    
    while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待發送完成,判斷標誌位
    
    return ch;
}
View Code
 1 /*pbdata.h*/
 2 /***************************************************************************************************
 3 *
 4 * 文件名稱:pbdata.h
 5 * 文件功能:自定義的函數和全局變量的聲明頭文件
 6 *
 7 ***************************************************************************************************/
 8 
 9 #ifndef _pbdata_H
10 #define _pbdata_H
11 
12 
13 
14 
15 
16 /********************************************************************
17 *
18 *  調用的頭文件放在這裏
19 *
20 ********************************************************************/
21 #include "stm32f10x.h"
22 #include "misc.h"
23 #include "stm32f10x_exti.h"
24 #include "stm32f10x_tim.h"
25 #include "stm32f10x_usart.h"
26 #include "stdio.h"
27 
28 
29 
30 
31 /********************************************************************
32 *
33 *  自定義全局變量聲明
34 *
35 ********************************************************************/
36 extern u8 dt;
37 
38 
39 
40 
41 
42 /********************************************************************
43 *
44 *  自定義全函數聲明
45 *
46 ********************************************************************/
47 void delay(u32 nCount);
48 void delay_us(u32 nus);
49 void delay_ms(u16 nms);
50 int fputc(int ch,FILE *F);
51 
52 
53 
54 #endif
View Code

 

三、工程下載:函數

http://download.csdn.net/detail/a1181803348/8745749oop

相關文章
相關標籤/搜索