完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请问大家8L的USART+DMA如何使用啊,程序如下没有发送数据。
void USART1_Send(unsigned char n) { while(!USART_GetFlagStatus (USART1,USART_FLAG_TXE));//等待发送完毕 USART_SendData8(USART1,n); //发送数据 } void DMA_Config(void) { DMA_GlobalDeInit(); DMA_DeInit(DMA1_Channel0); DMA_Init(DMA1_Channel0,(unsigned int)( ii),(unsigned int)(USART1_BASE+0x01),1, DMA_DIR_MemoryToPeripheral,DMA_Mode_Circular,DMA_MemoryIncMode_Inc,DMA_Priority_Medium,DMA_MemoryDataSize_HalfWord); DMA_Cmd(DMA1_Channel0,ENABLE); DMA_GlobalCmd(ENABLE); } void main(void) { asm("rim"); GPIO_Init(GPIOD,GPIO_Pin_4,GPIO_Mode_Out_PP_Low_Slow); GPIO_Init(GPIOB,GPIO_Pin_6,GPIO_Mode_In_PU_No_IT); CLK_PeripheralClockConfig (CLK_Peripheral_USART1,ENABLE);//开启USART时钟 CLK_PeripheralClockConfig (CLK_Peripheral_DMA1,ENABLE); USART_Init(USART1,9600,USART_WordLength_8b,USART_StopBits_1,USART_Parity_No,USART_Mode_Tx);//USART初始化,9600,8N1 USART_Cmd (USART1,ENABLE);//使能USART USART_DMACmd(USART1,USART_DMAReq_TX,ENABLE); |
|
相关推荐
1个回答
|
|
STM8L的USART+DMA使用步骤如下:
1. 配置USART:首先,需要配置USART的波特率、数据位、停止位等参数。可以使用STM8L的库函数进行配置。 ```c void USART1_Config(void) { USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 9600; // 设置波特率为9600 USART_InitStructure.USART_WordLength = USART_WordLength_8b; // 设置数据位为8位 USART_InitStructure.USART_StopBits = USART_StopBits_1; // 设置停止位为1位 USART_InitStructure.USART_Parity = USART_Parity_No; // 设置无奇偶校验位 USART_InitStructure.USART_SyncMode = USART_SyncMode_Disable; // 设置同步模式为禁用 USART_InitStructure.USART_Mode = USART_Mode_Tx; // 设置USART模式为发送模式 USART_Init(USART1, &USART_InitStructure); // 初始化USART1 USART_Cmd(USART1, ENABLE); // 使能USART1 } ``` 2. 配置DMA:接下来,需要配置DMA的通道、源地址、目标地址、数据大小等参数。 ```c void DMA_Config(void) { // 首先初始化DMA DMA_DeInit(DMA1_Channel0); // 然后配置DMA参数 DMA_Init(DMA1_Channel0, DMA_PeripheralBaseAddr, (uint16_t)&USART1_DR_L, DMA_MemoryBaseAddr, DMA_BufferSize, DMA_DIR_PeripheralSRC, DMA_Mode_Normal, DMA_Priority_High, DMA_M2M_Disable); // 使能DMA通道 DMA_Cmd(DMA1_Channel0, ENABLE); } ``` 3. 配置USART的DMA请求:在USART的配置中,需要使能DMA发送请求。 ```c void USART1_DMA_Config(void) { USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE); // 使能USART1的DMA发送请求 } ``` 4. 发送数据:使用DMA发送数据时,需要将数据放入DMA的内存地址中,然后启动DMA传输。 ```c void USART1_Send_DMA(uint8_t *data, uint16_t length) { // 设置DMA的内存地址和数据长度 DMA_SetCurrDataCounter(DMA1_Channel0, length); DMA_SetCurrAddr(DMA1_Channel0, (uint16_t)data); // 启动DMA传输 DMA_Cmd(DMA1_Channel0, ENABLE); } ``` 5. 在主函数中调用上述函数进行配置和发送数据。 ```c int main(void) { uint8_t data[] = {0x01, 0x02, 0x03, 0x04}; // 示例数据 uint16_t length = sizeof(data); // 配置USART USART1_Config(); // 配置DMA DMA_Config(); // 配置USART的DMA请求 USART1_DMA_Config(); // 使用DMA发送数据 USART1_Send_DMA(data, length); while (1) { // 其他任务 } } ``` 注意:在实际应用中,需要根据具体的硬件连接和需求调整配置参数。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1152 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1184 浏览 1 评论
602 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
449 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1089 浏览 2 评论
1647浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
313浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
314浏览 3评论
307浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
279浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-27 14:19 , Processed in 1.407159 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191