stm8系列--usart收发+遇到问题
2025-09-08 来源:cnblogs
#define _maxbuf 100
typedef struct
{
u8 rcbuf[_maxbuf]; //MODBUS接收缓冲区
u16 timout;//MODbus的数据断续时间
u8 recount;//MODbus端口已经收到的数据个数
u8 reflag;//收到一帧数据的标志
u8 Sendbuf[_maxbuf]; //MODbus发送缓冲区
}MYUSART;
void main(void)
{
Init_UART1();
Init_Timer4();
enableInterrupts();
while (1)
{
if(myusart.reflag>0)
{
Com_Handle();//收到什么回复什么;
myusart.recount=0;
myusart.reflag=0;
}
}
}
void Init_Timer4(void)
{
TIM4_TimeBaseInit(TIM4_PRESCALER_128, 0x0f); //1MS
TIM4_ClearFlag(TIM4_FLAG_UPDATE);
TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
TIM4_Cmd(ENABLE);
}
MYUSART myusart;
void Init_UART1(void)
{
UART1_DeInit();
UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);
UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);
}
void UART1_SendData8_Buff(uint8_t* data,uint8_t len)
{
uint8_t i = 0;
for(i=0;i while(( UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET)); UART1_SendData8(data[i]); } } void Com_Handle(void)//发送什么回复什么 { UART1_SendData8_Buff(myusart.rcbuf,myusart.recount); } INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18) { /* In order to detect unexpected events during development, it is recommended to set a breakpoint on the following instruction. */ #if 1 if( myusart.reflag==0) { myusart.timout=10; if(myusart.recount<_maxbuf) { myusart.rcbuf[myusart.recount++]=UART1_ReceiveData8(); } } #endif UART1_ClearITPendingBit(UART1_IT_RXNE); } int time_i=0; INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23) { /* In order to detect unexpected events during development, it is recommended to set a breakpoint on the following instruction. */ #if 1 if(myusart.timout>0) { if(--myusart.timout==0) { myusart.reflag=1; //收到一帧数据 } } #endif time_i++; if(time_i>=300) { time_i=0; flag_send=1; } //300MS TIM4_ClearITPendingBit(TIM4_IT_UPDATE); } https://blog.csdn.net/taoynkkx/article/details/46821953?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogOpenSearchComplete%7ERate-5-46821953-blog-71158962.235%5Ev43%5Epc_blog_bottom_relevance_base8&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogOpenSearchComplete%7ERate-5-46821953-blog-71158962.235%5Ev43%5Epc_blog_bottom_relevance_base8&utm_relevant_index=10


- 嵌入式的风向变了:2026纽伦堡嵌入式展透露这些趋势
- 高通确认不在GDC 2026发布新款骁龙G系列掌机处理器SoC
- 行业评论 从工具到平台:如何化解跨架构时代的工程开发和管理难题
- 阿里达摩院发布玄铁C950,打破全球RISC-V CPU性能纪录
- 面向嵌入式部署的神经网络优化:模型压缩深度解析
- Mujoco中添加Apriltag标签并实现相机识别教程
- 摩尔线程MTT S5000全面适配Qwen3.5三款新模型
- 英飞凌与宝马集团携手合作,基于Neue Klasse架构塑造软件定义汽车的未来
- 物理AI仿真新突破:摩尔线程与五一视界共建全栈国产化生态
- 爆火的OpenClaw! 告别云端,米尔RK3576开发板本地部署
- 中国芯片研发重要成果!中科院发布香山、如意系统
- Miniconda环境隔离教程:解决Python版本冲突的完整指南
- Jetson GPU Burn烤机测试与PTX编程详解
- LabelImg安装使用教程:YOLOv12训练数据标注完整指南
- 根据题意,水位上升记为正,下降记为负。汛期水位上升3分米(即0.3米)记作+3分米,此时达到最高水位12.5米,因此基准水位(记作0时的水位)为: 12.5米 - 0.3米 = 12.2米。 汛期过后水位下降4分米(即0.4米),是从最高水位下降,故实际水位为: 12.5米 - 0.4米 = 12.1米。 实际水位相对于基准水位的变化量为: 12.1米 - 12.2米 = -0
- YOLOv12训练实战:train.py常用参数详解
- Altera 与 Arm 深化合作,共筑 AI 数据中心高效可编程新方案
- 莱迪思加入英伟达 Halos生态系统,通过Holoscan传感器桥接技术提升物理人工智能安全性
- 芯科科技闪耀2026嵌入式世界展 以Connected Intelligence赋能,构建边缘智能网联新生态




