完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
有没有用过的兄弟,请问一下,STM8L151C8,USART1,看资料有三组脚输出,分别是:PA2,PA3,PC2,PC3,PC5,PC6,我现在画的板是接在PC2,PC3上,请问一下怎么配置?
|
|
相关推荐
6个回答
|
|
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); } } 上面示例是异步读写,加一个状态等待的循环判断,可改为同步读写。 |
|
|
|
看看这个还行啊,网上找的,我看了一下,跟你说的要求一样的。
|
|
|
|
谢谢!我画板就是PC2,PC3,那就是直接用就可以了,不需要设置了,是吗?
|
|
|
|
找到资料了,知道怎么回事了,谢谢你!
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 |
|
|
|
不用客气,多来论坛分享一下经验,让大家一起学习
|
|
|
|
不知道,学习了
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2005 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1858 浏览 3 评论
4442 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2007 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2513 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 04:15 , Processed in 0.726820 second(s), Total 83, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号