STM32 开发入门教程 - 图文(5)

2019-05-17 09:51

10、设置系统时钟 RCC_SYSCLKConfig;

11、判断是否PLL是系统时钟 while(RCC_GetSYSCLKSource() != 0x08)

12、打开要使用的外设时钟 RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()

具体设置请参考下面的文章

STM32时钟系统与软件配置

STM32的时钟系统分析

STM32 的时钟与RTC

(3) 设置外部中断, 所有的 GPIO 口都可以作为外部中断源. 具体可以参考下面这篇文章.

STM32中外部中断与外部事件

/* Connect EXTI Line3 to PA.3 */

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource3);

/* Configure EXTI Line3 to generate an interrupt on falling edge */ EXTI_InitStructure.EXTI_Line = EXTI_Line3;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(EXTI_InitStructure);

同样不要忘记打开时钟, 我们在打开 PA 口的时候已经加上了 RCC_APB2Periph_AFIO, 这里再提醒大家一下.

/* Enable GPIOA and AFIO clocks */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |

RCC_APB2Periph_AFIO, ENABLE);

最后就是编写外部中断入口函数. void EXTI3_IRQHandler(void) {

int i;

if(EXTI_GetITStatus(EXTI_Line9) != RESET) {

GPIO_SetBits(GPIOA,GPIO_Pin_0); GPIO_SetBits(GPIOA,GPIO_Pin_1);

for(i=0;i<=8000000;i++);

21

GPIO_ResetBits(GPIOA,GPIO_Pin_0); GPIO_ResetBits(GPIOA,GPIO_Pin_1);

for(i=0;i<=1000000;i++)

/* Clear the EXTI line 3 pending bit */ EXTI_ClearITPendingBit(EXTI_Line3); } }

不要忘记在中断函数处理完成后清掉标志位,不然会不停的进入中断.

(4) 编译与调试

我们已经完成所有程序编写部份, 接下来就是将工程编译成功后下载到我们的 Mini-STM32 开发板中进行调试和仿真.

如果看到 LED 有规律的点亮和熄灭, 按下按钮后 LED 先是一起熄灭, 在一起点亮, 然后恢复有规律的点亮这个过程, 说明我们已经达到我们的设计目标.

--------------------------------------------------------------------------

总结: 我们学习完了这篇教程之后, 相信大家对下面几个方面的内容已经掌握了. * GPIO 的设置

* STM32 GPIO 的优势 * STM32 的时钟结构 * 外部中断的配置

* 外部中断和外部事件的区别

(五) 异步串口双工通讯

(一) STM32 的 USART 模拟介绍

通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换。 USART利用分数波特率发生器提供宽范围的波特率选择。

22

它支持同步单向通信和半双工单线通信。它也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。用于多缓冲器配置的DMA方式,可以实现高速数据通信。

主要特性:

全双工的,异步通信 NR 标准格式

分数波特率发生器系统

-发送和接收共用的可编程波特率,最高到4.5Mbits/s 可编程数据字长度(8位或9位)

可配置的停止位 -支持1或2个停止位

LIN主发送同步断开符的能力以及LIN从检测断开符的能力

- 当USART硬件配置成LIN时,生成13位断开符;检测10/11位断开符 发送方为同步传输提供时钟 IRDA SIR 编码器解码器

- 在正常模式下支持3/16位的持续时间 智能卡模拟功能

- 智能卡接口支持ISO7816 -3标准里定义的异步协议智能卡 - 智能卡用到的0.5和1.5个停止位 单线半双工通信

使用DMA的可配置的多缓冲器通信

- 在保留的SRAM里利用集中式DMA缓冲接收/发送字节 单独的发送器和接收器使能位 检测标志

- 接收缓冲器满 - 发送缓冲器空 - 传输结束标志 校验控制

- 发送校验位 - 对接收数据进行校验 四个错误检测标志 - 溢出错误 - 噪音错误 - 帧错误 - 校验错误 10个带标志的中断源

23

- CTS改变 - LIN断开符检测 - 发送数据寄存器 - 发送完成 - 接收数据寄存器 - 检测到总线为空 - 溢出错误 - 帧错误 - 噪音错误 - 校验错误

多处理器通信 - - 如果地址不匹配,则进入静默模式 从静默模式中唤醒(通过空闲总线检测或地址标志检测) 两种唤醒接收器的方式 - 地址位(MSB) - 空闲总线

(二) 程序编写

(1) 在 RCC_Configuration 函数中, 打开串口时钟 /* Enable USART1, GPIOA, GPIOx and AFIO clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA RCC_APB2Periph_GPIOx

| RCC_APB2Periph_AFIO, ENABLE);

(2) 设置串口的 RTX, TDX IO 口的属性 void GPIO_Configuration(void) {

GPIO_InitTypeDef GPIO_InitStructure;

/* Configure USART1 Rx (PA.10) as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, GPIO_InitStructure);

24

|

/* Configure USART1 Tx (PA.09) as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, GPIO_InitStructure); }

(3) 移植 fputc 函数 int fputc(int ch, FILE *f) {

/* Place your implementation of fputc here */ /* e.g. write a character to the USART */ USART_SendData(USART1, (u8) ch);

/* Loop until the end of transmission */

while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) { }

return ch; }

(4) 主函数中初始化串口设置

USART_ClockInitStructure.USART_Clock = USART_Clock_Disable; USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge; USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable; /* Configure the USART1 synchronous paramters */ USART_ClockInit(USART1, USART_ClockInitStructure);

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 ;

25


STM32 开发入门教程 - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中新自由贸易区发展现状及趋势研究

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: