下面是我的一些采买信息表,看时间可以知道,这是器件买了一个月才张贴出来,忘版主见谅。
![](http://uphotos.eepw.com.cn/th152210/pics/585edd1db6205c9ca41e57b008bdac1e.jpg)
![](http://uphotos.eepw.com.cn/th152210/pics/514c11320bd85a2f9bade15174c9c96d.jpg)
对于一个器件来说,只有实现了输入输出才能体现出它存在的价值,因此学习STM32的GPIO有着重要的意义。
那么如何才能学好GPIO呢?那么你就要对GPIO相关的库文件进行了解。最好的方法就是实践,首先建立一个工程,然后编写GPIO的程序,不断的修改程序,并利用板载的LED观察每次修改的结果,不断的总结经验中就能学到很多知识。
趁热打铁,我自己写的LED流水灯测试程序,代码如下:
/**
******************************************************************************
* @file main.c
* @author th152210
* @version V1.0
* @date 2012/05/07
* @brief four LEDs turn on/off like running water
******************************************************************************
* @description
* four LEDs turn on/off like running water
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#define led GPIOE
#define led1 GPIO_Pin_2
#define led2 GPIO_Pin_3
#define led3 GPIO_Pin_4
#define led4 GPIO_Pin_5
#define ledTurnOn(ledx) GPIO_ResetBits(led , ledx)
#define ledTurnOff(ledx) GPIO_SetBits(led , ledx)
#define ledTurnOnAll() ledTurnOn(gpioInit.GPIO_Pin)
#define ledTurnOffAll() ledTurnOff(gpioInit.GPIO_Pin)
/**
* @brief time delay about 0.3s
* @param none.
* @retval None
*/
void delay(void)
{
uint32_t i,j;
for (i=0;i<1500;i++)
{
for (j=0;j<1000;j++)
{
;
}
}
}
/**
* @brief the main process.
* @note cannt built without it.
* @param none.
* @retval None
*/
main ()
{
GPIO_InitTypeDef gpioInit;
uint16_t count0,count1,count2,count3;
count0 = 0;
//-----initialization------
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); //enable APB2 periph
gpioInit.GPIO_Pin = led1|led2|led3|led4;
gpioInit.GPIO_Mode = GPIO_Mode_Out_PP;
gpioInit.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(led , &gpioInit); //initialiazate gpio
GPIO_SetBits(led , gpioInit.GPIO_Pin); //set pin
GPIO_ResetBits(led , gpioInit.GPIO_Pin); //reset pin
while (1)
{
for(;count0<8;count0++) //all LEDs light on/off together
{
ledTurnOnAll();
delay();
ledTurnOffAll();
delay();
}
for(;count0<12;count0++) //right turn on one by one
//and turn off all , then left...
{
count1=0;
ledTurnOn (led1);
delay();
ledTurnOn (led2);
delay();
ledTurnOn (led3);
delay();
ledTurnOn (led4);
delay();
ledTurnOffAll();
delay();
ledTurnOn (led4);
delay();
ledTurnOn (led3);
delay();
ledTurnOn (led2);
delay();
ledTurnOn (led1);
delay();
ledTurnOffAll();
delay();
}
for(;count0<16;count0++) //right turn on one by one
//and left turn off one by one
{
count1=0;
ledTurnOn (led1);
delay();
ledTurnOn (led2);
delay();
ledTurnOn (led3);
delay();
ledTurnOn (led4);
delay();
ledTurnOff (led4);
delay();
ledTurnOff (led3);
delay();
ledTurnOff (led2);
delay();
ledTurnOff (led1);
delay();
}
for(;count0<17;count0++)
{
ledTurnOn (led1);
delay();
ledTurnOn (led2);
delay();
ledTurnOn (led3);
delay();
ledTurnOn (led4);
delay();
ledTurnOff (led1);
delay();
ledTurnOff (led2);
delay();
ledTurnOff (led3);
delay();
ledTurnOff (led4);
delay();
}
for(;count0<21;count0++) //left turn on one by one
//and right turn off one by one
{
count1=0;
ledTurnOn (led4);
delay();
ledTurnOn (led3);
delay();
ledTurnOn (led2);
delay();
ledTurnOn (led1);
delay();
ledTurnOff (led1);
delay();
ledTurnOff (led2);
delay();
ledTurnOff (led3);
delay();
ledTurnOff (led4);
delay();
}
}
}
工程文件以及相关视频、图像,明天下班后分享。
我的串口调试程序。开始运行时,先发送一串数据。然后开始等待接收数据
(inputString()),再将接收到的数据发送(putString())出去。我的程序如
下:
/**
******************************************************************************
* @file main.c
* @author th152210
* @version V1.0
* @date 2012/05/07
* @brief USART Send string "www.hi.baidu.com/th152210" per second
******************************************************************************
* @description
* USART Send string "www.hi.baidu.com/th152210" per second , and when it is
* sending the led flashing.then USART send the string it received from the
* computer . for example when it receive "www.hi.baidu.com/th152210" , then it
* will send "www.hi.baidu.com/th152210" to the computer .
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "string.h"
/* Defination ----------*/
//---the port for leds---
#define led GPIOE
#define led1 GPIO_Pin_2
#define led2 GPIO_Pin_3
#define led3 GPIO_Pin_4
#define led4 GPIO_Pin_5
/********var**********/
char usartRxBuffer[256];
/**
* @brief time delay
* @param none.
* @retval None
*/
void delay()
{
vu32 i,j;
for(i=0;i<9000000;i++);
}
/**
* @brief send a data by USART
* @param data : the data for sending
* @retval none
*/
void putChar(uint16_t data)
{
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);//wait until empty
USART_SendData(USART1 , data); //send data
}
/**
* @brief send a string by USART
* @param data : the data for sending
* @retval none
*/
void putString(char data[] , uint16_t lenth)
{
uint16_t i;
if(lenth == 0)
{
for(i = 0 ; i < strlen(data); i++)
{
putChar(data[i]); //send one data of data[i]
}
}else
{
for(i = 0 ; i < lenth ; i++)
{
putChar(data[i]); //send one data of data[i]
}
}
}
/**
* @brief receive a data
* @param none
* @retval the data received
*/
uint16_t inputChar()
{
uint16_t data;
while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);//wait for the RX no empty bit become 1
data = USART_ReceiveData(USART1);
return data;
}
/**
* @brief receive a string
* @param the string received
* @retval none
*/
char inputString()
{
char data , i;
data = (char)inputChar();
for(i = 0; (data != 0x0D) && (i < 255); i++)
{
usartRxBuffer[i] = data;
data = (char)inputChar();
}
if(i == 255) return 0;
else return 1;
}
/**
* @brief the main
* @param none.
* @retval None
*/
int main (void)
{
GPIO_InitTypeDef gpioInit;
USART_InitTypeDef USART_InitStructure;
char *string;
uint16_t data;
//----- RCC initialization -------
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); //enable APB2 periph
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
//RCC_GetClockFreq(&RCC_ClockFreq);
//----- IO initialization -----
gpioInit.GPIO_Pin = led1|led2|led3|led4;
gpioInit.GPIO_Mode = GPIO_Mode_Out_PP;
gpioInit.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(led , &gpioInit); //initialiazate gpio
GPIO_SetBits(led , gpioInit.GPIO_Pin); //Set pin
//GPIO_ResetBits(led , gpioInit.GPIO_Pin); //Reset pin
/* Configure USART1 Tx (PA.09) as alternate push-pull */
gpioInit.GPIO_Pin = GPIO_Pin_9;
gpioInit.GPIO_Speed = GPIO_Speed_50MHz;
gpioInit.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &gpioInit);
//----- UART initialization ----
//0-----串口参数配置------
USART_InitStructure.USART_BaudRate = 19200; //设置波特率为19200
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //设置数据位为8位
USART_InitStructure.USART_StopBits = USART_StopBits_1; //设置停止位为1位
USART_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //没有硬件流控
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; //send and receive mode
//0-----------------------
USART_Init(USART1, &USART_InitStructure); //initialization USART1
USART_Cmd(USART1 , ENABLE); //enable USART1 modulation
//USART_ITConfig(USART1, USART_IT_RXNE, DISABLE); //disable USART1 interruption
//查询方式发送数据
string = "www.hi.baidu.com/th152210\n";
GPIO_ResetBits(led , led1|led2); //Reset pin
putString(string,0); //send string
GPIO_SetBits(led , led1|led2); //Set pin
while(1)
{
GPIO_ResetBits(led , led3|led4); //Reset pin1 2
inputString();
//data = inputChar();
//delay();
GPIO_SetBits(led , led3|led4); //Set pin1 2
//putString(string,6);
GPIO_ResetBits(led , led1|led2); //Reset pin3 4
//putChar(data);
putString(usartRxBuffer,0);
GPIO_SetBits(led , led1|led2); //Set pin3 4
}
}
有奖活动 | |
---|---|
【有奖活动——B站互动赢积分】活动开启啦! | |
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |