-
中断管理函数:
开发送中断:
USART_ITConfig(USARTy, USART_IT_TXE, ENABLE);
开发送中断:
USART_ITConfig(USARTy, USART_IT_TXE, DISABLE);
开接收中断:
USART_ITConfig(USARTy, USART_IT_RXNE, ENABLE);
关接收中断:
USART_ITConfig(USARTy, USART_IT_RXNE, DISABLE);
-
中断响应函数:
if(USART_GetITStatus(USARTy, USART_IT_RXNE) != RESET)
{
/* Read one byte from the receive data register */
RxBuffer[RxCounter] = USART_ReceiveData(USARTy);
if(RxBuffer[RxCounter-1] == '\r' && RxBuffer[RxCounter] == '\n')
{
/* 关闭接受中断,开启发送中断 */
USART_ITConfig(USARTy, USART_IT_RXNE, DISABLE);
USART_ITConfig(USARTy, USART_IT_TXE, ENABLE);
}
RxCounter++;
}
if(USART_GetITStatus(USARTy, USART_IT_TXE) != RESET)
{
/* Write one byte to the transmit data register */
USART_SendData(USARTy,RxBuffer[TxCounter++]);
if(TxCounter == RxCounter)
{
RxCounter = 0;
TxCounter = 0;
/* 关闭接受中断,开启发送中断 */
USART_ITConfig(USARTy, USART_IT_RXNE, ENABLE);
USART_ITConfig(USARTy, USART_IT_TXE, DISABLE);
}
}
-
使用中断方式时,还需要配置中断:
NVIC_InitTypeDef NVIC_InitStructure;
/* Enable the USARTz Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
-
先介绍查询方式。
发送:
void SendByte(uint8_t ch){ USART_SendData(EVAL_COM1, (uint8_t) ch); while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET) {}}
接收:
uint8_t RecvgByte(void){ while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_RXNE) == RESET) {} return USART_ReceiveData(EVAL_COM1);}
[ 本帖最后由 飞嵌电子 于 2010-7-5 20:55 编辑 ]
-
至此,串口初始化完毕。可以进行数据通信了。通信分三种模式:
查询
中断
DMA(此方式暂时不介绍)
-
接下来初始化串口参数:
USART_InitStructure.USART_BaudRate = 115200;
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;
/* Configure USARTy */
USART_Init(USARTy, &USART_InitStructure);
-
时钟使能:
/* Enable GPIO clock */
RCC_APB2PeriphClockCmd(USARTy_GPIO_CLK | RCC_APB2Periph_AFIO, ENABLE);
#ifndef USE_STM3210C_EVAL
/* Enable USARTy Clock */
RCC_APB2PeriphClockCmd(USARTy_CLK, ENABLE);
#else
/* Enable USARTy Clock */
RCC_APB1PeriphClockCmd(USARTy_CLK, ENABLE);
#endif
使用DMA方式还需要使能DMA的时钟:
/* DMA clock enable */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
-
串口发送和接收引脚是GPIO的复用,所以串口初始化需要使能响应的GPIO和时钟。
GPIO使能:
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
#ifdef USE_STM3210C_EVAL
/* Enable the USART2 Pins Software Remapping */
GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
#elif defined(USE_STM3210B_EVAL) || defined(USE_STM32100B_EVAL)
/* Enable the USART2 Pins Software Remapping */
GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
#endif
/* Configure USARTy Rx as input floating */
GPIO_InitStructure.GPIO_Pin = USARTy_RxPin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(USARTy_GPIO, &GPIO_InitStructure);
/* Configure USARTy Tx as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = USARTy_TxPin;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(USARTy_GPIO, &GPIO_InitStructure);
}
-
谢谢您的建议。
补充一下:
这款STM32F107最大的特色是网络接口和USB接口。本学习板在此基础上加了一些常用外设。
-
创建工程的视频,刚上传到优酷。现在还不能有链接。稍后链接过来!
-
蓝精灵STM32使用的主芯片为STM32F107VCT6, 该芯片是STM32F系列中的互联型产品,该芯片的主要特色如下: ARM 32-bit Cortex™-M3 内核,最高时钟72MHz
单周期乘除指令指令
64K SRAM,266K FLASH
2路16通道12bit ADC
2路12bit DAC
12通道DMA
80个GPIO
JTAG & SWD调试模式
CRC校验单元
多达10路定时器,包括2个看门狗定时器,能输出多路PWM,并能够对输入波形采样
通信接口齐全
多达5个USART接口
多达2个I2C接口
多达3个SPI接口
多达2个音频I2S接口
USB 2.0 full-speed device/host/OTG
10/100M自适应网络接口
[ 本帖最后由 飞嵌电子 于 2010-6-24 13:23 编辑 ]
-
上传资料 在1楼
-
网络上使用DP83848,用于提供物理层支持。提供TCP和UDP与PC通信的例子,并且提供操作说明。
具体的例子有:
实现开发板和PC机之间的网络通信(TCP和UDP)。
可以通过浏览器观察ADC采样、控制LED。
通过tftp协议上传存储在SD卡中的文件,下载文件到SD卡中。
PC机通过ping命令查看开发板和PC的网络链接状态
通过telnet协议实现简单的命令控制
-
5V或USB供电BOOT模式可选择64K E2PROM(I2C接口)全部80个GPIO引出,方便用户扩展网络接口USB接口USART接口(RS232电平和TTL)SPI接口CAN接口SD卡接口5路ADC输入接口2路DAC输出接口TFT1.8接口复位、Wakeup, Tamper和用户按键4个LEDRTC,带电池座
-
其他内容不断更新中……
-
另外,飞嵌电子还将开放该电路板的所有电路图,包括原理图、PCB以及相应的库。开放的电路图包括:
蓝精灵107学习板原理图
蓝精灵107学习板原理图库
蓝精灵107学习板PCB
蓝精灵107学习板PCB库
蓝精灵103学习板原理图
蓝精灵103学习板原理图库
蓝精灵103学习板PCB
蓝精灵103学习板PCB库
JLINK V8 原理图
JLINK V8 固件
JLINK V8 使用说明
TFT1.8 原理图
TFT1.8 原理图库
TFT1.8 PCB
TFT1.8 PCB库
-
提供的资料有:
* LwIP
LwIP的基本资料和源代码。另外,还有LwIP在STM32F107上的移植示例和演示说明。
* ucOS
ucOS资料和官方移植程序,以及笔者根据官方例子改写的在本开发板上的例子。
* tft1.8
本开发板使用的1.8寸TFT屏的资料、51演示程序以及例程中用到的图片。
* 资料
STM32的用户手册、固件库手册和数据手册,以及相应的中文版手册。另外还有其他资料。
* 开发工具
附送的开发工具及其使用说明,另外还有图片取模(Iamge2Lcd)、WinHex等软件。
* 固件库
飞嵌电子 AQUA小组根据开发板对官方的固件库修改后的专用固件库以及官方固件库V3.3。
* 其他例程
网上下载的例程。
* 文件系统
efsl文件系统手册和源代码,以及efsl文件系统示例程序所需的SD内容。
-
为了帮助大家学习,飞嵌电子提供了很多例程和资料,例程包括:
* ADC-DMA
ADC1采集电位器电压,使用DMA方式传送数据。
* CAN loopback
CAN自回路测试程序
* DAC
DAC两路输出分别输出电源电压(VCC)的25%和50%
* EXTI
按下KEY2,LED1由亮变灭,再次按下按下KEY2,LED1由灭变亮,如此反复。
* GPIO
流水灯
* I2C
通过I2C总线访问24C64, 在同一地址写入和读出数据两次,如果写入和读出的数据一致,点亮相应的LED(LED1和LED2)。
* I2C-LCD
通过I2C总线访问24C64, 将存在24C64中的图片数据读出,在LCD上显示。由于24C64只有8K的存储空间,所以显示的图片为54*54。
* RTC
实现一个实时时钟,开发板掉电和复位后时钟能够自动恢复。
* SPI + SD
通过SPI读取存储在SD中的图片文件,并显示在LCD上。注意,此程序运行后,SD卡中的文件系统就会丢失。
* UART
开发板和PC进行通信。PC机向开发板发送以'\r''\n'结尾的字符串,开发板将返回相同的字符串。
* SysTick
用SysTick实现1s的延时,从而使LED1以2s为周期闪烁。
* TIM + PWM
利用TIM1产生7路PWM。PWM的频率为:17.57 KHz
四个通道的占空比分别位:
Chanel1:50%
Chanel2:37.5%
Chanel3:25%
Chanel4:12.5%
Chanel[1-3],分别输出2路PWM,Chanel4输出1路PWM
* USB + SD卡
通过USB发送和接收存储在SD卡中的数据。
* LwIP
实现开发板和PC机之间的网络通信。
可以通过浏览器观察ADC采样、控制LED。
通过tftp协议上传存储在SD卡中的文件,下载文件到SD卡中。
PC机通过ping命令查看开发板和PC的网络链接状态
通过telnet协议实现简单的命令控制
-
本次活动使用我们飞嵌电子开发的蓝精灵107开发板,该开发板主要资源如下:
5V或USB供电
BOOT模式可选择
64K E2PROM(I2C接口)
全部80个GPIO引出,方便用户扩展
网络接口
USB接口
USART接口(RS232电平和TTL)
SPI接口
CAN接口
SD卡接口
5路ADC输入接口
2路DAC输出接口
TFT1.8接口
复位、Wakeup, Tamper和用户按键
4个LED
RTC,带电池座
-
教程的内容如下:
1、STM32F107简介
2、STM32固件库介绍及使用MDK创建工程
视频:https://bbs.eeworld.com.cn/thread-108908-1-2.html
3、使用JLINK调试和下载程序
4、时钟配置(视频教程)
5、GPIO
6、Systick
7、1.8寸TFT
8、RTC
9、DMA
10、定时器
11、PWM驱动步进电机
12、ADC
13、DAC
14、CAN
15、串口(USART)
16、I2C和E2PROM
17、SPI和SD
18、以太网
19、USB
20、uCOS
变成蓝色的部分表示相应的教程已经推出,点击即可进入相应的学习贴学习,下载资料和例程。
[ 本帖最后由 飞嵌电子 于 2010-7-27 18:34 编辑 ]