STM32 例程 串口实验

发布时间 : 星期一 文章STM32 例程 串口实验更新完毕开始阅读

/*----------------------------------------------------------------------------------------------------- // 功能描述 清除USARTx的中断挂起位

// 输入参数 USARTx:选择USART或 UART 外设 // 可以是下列值之一:

// USART1,USART2,USART3,UART4 或 UART5 // 输入参数 USART_IT:待清除的USART中断挂起位 // 可以是下列值之一: // USART_ IT _CTS: CTS 变化中断(UART4 和 UART5不可用) // USART_ IT _LBD: LIN 断开检测中断 // USART_ IT _TC: 发送完成中断 // USART_ IT _RXNE: 接收数据寄存器非空中断 //

// 注意

// - PE(校验错误),FE(帧错误),NE(噪声错误),ORE(上溢错误) // 和IDLE(空闲帧检测)挂起位通过软件时序被清除:

// 一个对USART_SR 寄存器的读操作(USART_GetFlagStatus())

// 后跟一个对USART_DR 寄存器的读操作 (USART_ReceiveData())。 // - RXNE 挂起位也可以通过读USART_DR 寄存器被清除(USART_ReceiveData())。

// - TC 挂起位也可以通过软件时序被清除:

// 一个对USART_SR 寄存器的读操作(USART_GetFlagStatus()) // 后跟一个对USART_DR 寄存器的写操作(USART_SendData())。

// - TXE标志只能通过写USART_DR 寄存器被清除(USART_SendData())。 // 返回值 无

-----------------------------------------------------------------------------------------------------*/

void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT) {

uint16_t bitpos = 0x00, itmask = 0x00; /* 检查输入参数 */

assert_param(IS_USART_ALL_PERIPH(USARTx)); assert_param(IS_USART_CLEAR_IT(USART_IT)); /* CTS中断对UART4和UART5是无效的 */ if (USART_IT == USART_IT_CTS) {

assert_param(IS_USART_123_PERIPH(USARTx)); }

bitpos = USART_IT >> 0x08;

itmask = ((uint16_t)0x01 << (uint16_t)bitpos); USARTx->SR = (uint16_t)~itmask; }

[编辑] USART实例

实例USART_HyperTerminal_Interrupt

[编辑] main.c

[编辑] main函数

int main(void) {

/* NVIC 配置 */

NVIC_Configuration();

/* USARTx 配置

------------------------------------------------------*/ /* USARTx 配置如下: - 波特率9600 - 字长8位 - 停止位2位 - 奇校验

- 不使用硬件流控制 (RTS 和 CTS 信号) - 收发使能 */

USART_InitStructure.USART_BaudRate = 9600;

USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_2; USART_InitStructure.USART_Parity = USART_Parity_Odd; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

STM_EVAL_COMInit(COM1, &USART_InitStructure);

/* 使能 EVAL_COM1 发送中断:当EVAL_COM1 发送数据寄存器空,产生该中断 */

USART_ITConfig(EVAL_COM1, USART_IT_TXE, ENABLE);

/* 使能 EVAL_COM1 接收中断:当EVAL_COM1 接收数据寄存器非空,产生该中断 */

USART_ITConfig(EVAL_COM1, USART_IT_RXNE, ENABLE);

while (1) {

} }

[编辑] NVIC配置函数NVIC_Configuration

/*----------------------------------------------------------------------------------------------------- // 功能描述 配置NVIC // 输入参数 无 // 返回值 无

-----------------------------------------------------------------------------------------------------*/ void NVIC_Configuration(void) {

NVIC_InitTypeDef NVIC_InitStructure;

/* 使能 USARTx 中断 */

NVIC_InitStructure.NVIC_IRQChannel = USARTx_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }

[编辑] stm32100b_eval.h

#define COMn 2

// 描述 COM1口的定义,连接到 USART1

#define EVAL_COM1 USART1

#define EVAL_COM1_CLK RCC_APB2Periph_USART1 #define EVAL_COM1_TX_PIN GPIO_Pin_9 #define EVAL_COM1_TX_GPIO_PORT GPIOA

#define EVAL_COM1_TX_GPIO_CLK RCC_APB2Periph_GPIOA #define EVAL_COM1_RX_PIN GPIO_Pin_10 #define EVAL_COM1_RX_GPIO_PORT GPIOA

#define EVAL_COM1_RX_GPIO_CLK RCC_APB2Periph_GPIOA #define EVAL_COM1_IRQn USART1_IRQn

// 描述 COM2口的定义,连接到 USART2 (USART2 引脚被映射到 GPIOD) #define EVAL_COM2 USART2

#define EVAL_COM2_CLK RCC_APB1Periph_USART2 #define EVAL_COM2_TX_PIN GPIO_Pin_5 #define EVAL_COM2_TX_GPIO_PORT GPIOD

#define EVAL_COM2_TX_GPIO_CLK RCC_APB2Periph_GPIOD #define EVAL_COM2_RX_PIN GPIO_Pin_6 #define EVAL_COM2_RX_GPIO_PORT GPIOD

#define EVAL_COM2_RX_GPIO_CLK RCC_APB2Periph_GPIOD #define EVAL_COM2_IRQn USART2_IRQn

[编辑] stm32100b_eval.c

[编辑] 串口初始化函数STM_EVAL_COMInit

USART_TypeDef* COM_USART[COMn] = {EVAL_COM1, EVAL_COM2};

GPIO_TypeDef* COM_TX_PORT[COMn] = {EVAL_COM1_TX_GPIO_PORT, EVAL_COM2_TX_GPIO_PORT};

GPIO_TypeDef* COM_RX_PORT[COMn] = {EVAL_COM1_RX_GPIO_PORT, EVAL_COM2_RX_GPIO_PORT};

const uint32_t COM_USART_CLK[COMn] = {EVAL_COM1_CLK, EVAL_COM2_CLK};

const uint32_t COM_TX_PORT_CLK[COMn] = {EVAL_COM1_TX_GPIO_CLK, EVAL_COM2_TX_GPIO_CLK};

const uint32_t COM_RX_PORT_CLK[COMn] = {EVAL_COM1_RX_GPIO_CLK, EVAL_COM2_RX_GPIO_CLK};

const uint16_t COM_TX_PIN[COMn] = {EVAL_COM1_TX_PIN, EVAL_COM2_TX_PIN};

const uint16_t COM_RX_PIN[COMn] = {EVAL_COM1_RX_PIN, EVAL_COM2_RX_PIN};

/*----------------------------------------------------------------------------------------------------- // 功能描述 配置COM口

// 输入参数 COM:指定待配置的COM口 // 该参数可以是下列参数之一: // COM1 // COM2

// 输入参数 USART_InitStruct:指向结构USART_InitTypeDef的指针,包含USART外设的配置信息 // 返回值 无

-----------------------------------------------------------------------------------------------------*/

void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct)

联系合同范文客服:xxxxx#qq.com(#替换为@)