STM8L USART串口使用

发布者:暗里著迷最新更新时间:2019-01-07 来源: eefocus关键字:STM8L  USART  串口使用 手机看文章 扫描二维码
随时随地手机看文章

USART串口使用


STM8L上有多个串口,最多可达5个,分别为USART1~USART5,但依据型号不同,搭载数量并不相同。 


以STM8L052R8为例,其只具有USART1~USART3。 


因为STM8系列功能众多,很多Pin都是复用的,因此使用前必须检查STML的参考手册。 


通过手册可知,以USART1为例,RX/TX可以使用以下的管脚,默认是PC2/PC3,如果要变更,需要修改SYSCFG remap control register 1 (SYSCFG_RMPCR1)的5:4位进行切换。


Bits 5:4 USART1TR_REMAP[1:0]: USART1_TX and USART1_RX remapping 

00: USART1_TX on PC3 and USART1_RX on PC2 

01: USART1_TX on PA2 and USART1_RX on PA3 

10: USART1_TX on PC5 and USART1_RX on PC6 

11: Reserved


初始化:


    // USART init

    USART_DeInit(USART1);  


    // PC2-RX PC3-TX 端口上拉

    GPIO_ExternalPullUpConfig(GPIOC, GPIO_Pin_2 | GPIO_Pin_3, ENABLE);


    // 初始化参数

    USART_Init(USART1, 

                (uint32_t)9600, 

                USART_WordLength_8b, 

                USART_StopBits_1, 

                USART_Parity_No, 

                USART_Mode_Rx | USART_Mode_Tx);  // 允许读和写


    // 开中断

    // 一般需要写时再开写中断,否则写中断会非常频繁以至于始终在执行中断

    // 读中断看具体业务

    //USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);    

    //USART_ITConfig(USART1, USART_IT_TC, ENABLE);


    /* Enable USART 使能 */

    USART_Cmd(USART1, ENABLE);


关闭串口


    GPIO_ExternalPullUpConfig(GPIOC, GPIO_Pin_2 | GPIO_Pin_3, DISABLE);

    USART_Cmd(USART1, DISABLE );

    USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);

    USART_ITConfig(USART1, USART_IT_TC, DISABLE);


读写处理(异步)


void uart_begin_read(uint8_t len)

{

    // prepare send data

    USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);


    // 初始化读缓冲

    read_idx = 0;

    read_len = len;


    // 开始读(开读中断)

    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

}


void uart_begin_write(uint8_t* data, uint8_t len)

{

    // prepare send data

    USART_ITConfig(USART1, USART_IT_TC, DISABLE);


    // 初始化写缓冲(复制待写数据等)

    memcpy(writ_buffer, data, len);

    writ_idx = 0;

    writ_len = len;


    // 开始写(开写中断)

    USART_ITConfig(USART1, USART_IT_TC, ENABLE);


    return;

}


中断处理


// 写中断处理

INTERRUPT_HANDLER(USART1_TX_TIM5_UPD_OVF_TRG_BRK_IRQHandler, 27)

{

    // 发送1字节

    USART_SendData8(USART1, writ_buffer[writ_idx++]);

    USART_ClearITPendingBit(USART1, USART_IT_TC);


    // 等待缓冲数据全部写出后,关写中断

    if( writ_idx == writ_len ) {

        USART_ITConfig(USART1, USART_IT_TC, DISABLE);

        // 你的处理

    }

}


// 读中断处理

INTERRUPT_HANDLER(USART1_RX_TIM5_CC_IRQHandler, 28)

{

    uint8_t temp = 0;


    // 读1字节,存入读缓区

    temp = USART_ReceiveData8(USART1);

    read_buffer[read_idx++] = temp;


    // 等待全部读完后(如果有设定读长度的话)关读中断

    // 这里根据具体业务,可以不关中断一直接受数据

    if( read_idx == read_len ) {

        USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);

    }

}


上面示例是异步读写,加一个状态等待的循环判断,可改为同步读写。


关键字:STM8L  USART  串口使用 引用地址:STM8L USART串口使用

上一篇:STM32 USART1一键下载电路
下一篇:Stm32 从IAP跳转到app死机的问题

推荐阅读最新更新时间:2024-03-16 16:21

STM32基础知识3-STM32串口USART1的使用方法和程序
通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换。 USART利用分数波特率发生器提供宽范围的波特率选择,支持同步单向通信和半双工单线通信。 1、STM32固件库使用外围设备的主要思路 在STM32中,外围设备的配置思路比较固定。首先是使能相关的时钟,一方面是设备本身的时钟,另一方面如果设备通过IO口输出还需要使能IO口的时钟;最后如果对应的IO口是复用功能的IO口,则还必须使能AFIO的时钟。 其次是配置GPIO,GPIO的各种属性由硬件手册的AFIO一章详细规定,较为简单。 接着相关设备需要如果需要使用中断功能,必须先配置中断优先级,后文
[单片机]
STM32基础知识3-STM32<font color='red'>串口</font><font color='red'>USART</font>1的<font color='red'>使用</font>方法和程序
STM323 USART串口通信中断实现
问题描述:利用stm32串口通信,当PC端发送字符8时,LED PB.0闪亮 第一步:配置系统时钟,这个不用多讲,代码就不贴出来了; 第二步:GPIO端口配置: 设置PA.9为复用推挽输出,PA.10为浮空输入,PB.0,PB.1,PB.2输出并初始化PB.0亮 void GPIO_Config() { GPIOA- CRH=0X04B0; GPIOB- CRL=0X0333; GPIOB- ODR=0X01; } 第三步:USART寄存器配置: void USART_Config() { USART1- BRR = 0x1D4C; U
[单片机]
使用STM32的串口进行大量数据传输
近的一个项目需要用单片机和上位机进行大量数据的传输,每次传输的内容为一个1000*7的矩阵,矩阵中的每个元素都是一个4位有效数字,通过字符的形式保存,(如:1.000占5个字节)简单计算一下,1000*7*5=35000Byte,也就是30几K,而单片机型号为:STM32F103ZET6, SRAM有64K 。如果直接申请一个数组来保存,占用空间太大,但是又不适合用C标准库中的malloc 进行动态内存分配,网上有人自己写的实现动态内存管理的代码,可以移植,这是第一个问题。 第二个问题是,当我在串口中断中只做一件事:将接收的数据打印到终端,不再做其他事时,数据接收到的是完整的,一开始为了节省内存,申请了一个比较小的数组,循环使用
[单片机]
STM32F4之USART【库函数操作】
STM32F407xx内嵌四个通用同步/异步接收器(USART1,USART2,USART3 和USART6)和两个通用异步收发器(UART4和UART5)。这6个接口提供异步通信的IrDASIR ENDEC支持,多机通信模式,单线半双工通信模式LIN主/从功能。 USART1和USART6接口能够速度高达10.5 Mbit / s的通信其他可用的接口通信高达5.25bit/s。USART1,USART2,USART3和USART6还提供硬件管理的CTS,RTS信号,智能卡的模式(ISO7816兼容)和类似的SPI通信能力。所有接口都可以通过DMA控制器。 这里只使用了两根线的最简单串口设置。 硬件环境:STM32
[单片机]
STM32串行通信USART讲解笔记
dragon12345666的专栏 目录视图 摘要视图 订阅 异步赠书:Kotlin领衔10本好书 SDCC 2017之区块链技术实战线上峰会 程序员8月书讯 每周荐书:Java Web、Python极客编程(评论送书) STM32串行通信USART讲解笔记 标签: 中南赵小龙 STM32 串行通信 USART1 2014-04-25 16:58 2741人阅读 评论 (0) 收藏 举报 分类: STM32 学习(9) 版权声明:本文为博主原创文章,未经博主允许不得转载。 目录 (?) STM32串行通信USART程序例举链接:http://blog.csdn.ne
[单片机]
STM32串行通信<font color='red'>USART</font>讲解笔记
STC15F104W使用定时器0模拟串口
#include reg51.h #include intrins.h //定义波特率常量 //BAUD = 65536 - FOSC/3/BAUDRATE/M (1T:M=1; 12T:M=12) //NOTE: (FOSC / 3 / BAUDRATE)必须大于98,(建议增加110) //#define BAUD 0xF400 // 1200bps @ 11.0592MHz #define BAUD 0xFA00 // 2400bps @ 11.0592MHz //#define BAUD 0xFD00 // 4800bps @ 11.0592MHz //#defin
[单片机]
STM8L探索套件学习笔记-低功耗模式(十二)
官方给的例程当中,使用PE6作为IDD_WAKUP,将系统从低功耗中唤醒, STM8L有5种低功耗模式,降低功耗的方法还可以将系统时钟降低或者关闭没有使用的外设。 今天我们就使用U3这个14阶脉动进位计数器M74HC4060进行HALT模式唤醒,从原理图可以看到Q14脚输出的反向连接到T2模拟开关,控制PE6端口。因为经过两个反向器,使用Q14的逻辑等于PE6的逻辑。U3的时钟频率为30KHZ,Q14的脉冲周期为2的14次方除以30KHZ,约等于0.5s,也就是说Q14输出的脉冲是周期大约为1秒,占空比为1:1的方波。所以PE6的电平变化也是周期大约为1秒,占空比为1:1的方波。代码设计如下: void main(void) {
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved