【TI毫米波雷达笔记】UART串口外设配置及驱动(以IWR6843AOP为例)
【TI毫米波雷达笔记】UART串口外设初始化配置及驱动(以IWR6843AOP为例)
最基本的工程建立好以后
需要给SOC进行初始化配置
int main (void)
{//刷一下内存memset ((void *)L3_RAM_Buf, 0, sizeof(L3_RAM_Buf));int32_t errCode; //存放SOC初始化错误代码SOC_Cfg socCfg; //SOC配置结构体Task_Params taskParams; //任务参数SOC_Handle socHandle;ESM_init(0U); //与安全等有关,可略过/* Initialize the SOC configuration: *//* 初始化SOC配置结构体 */memset ((void *)&socCfg, 0, sizeof(SOC_Cfg));memset((void *)&MMWave_Global_Params,0,sizeof(MMWave_Global));/* 配置SOC配置结构体 *//* Populate the SOC configuration: */socCfg.clockCfg = SOC_SysClock_INIT;socCfg.mpuCfg = SOC_MPUCfg_CONFIG;/* require to UNHALT the DSS if this core is available in selected device */socCfg.dssCfg = SOC_DSSCfg_UNHALT;/* Initialize the SOC Module: This is done as soon as the application is started* to ensure that the MPU is correctly configured. *//* SOC初始化,必须在系统运行后尽快调用该初始化函数 */socHandle = SOC_init (&socCfg, &errCode);if (socHandle == NULL){System_printf ("Error: SOC Module Initialization failed [Error code %d]\n", errCode);return -1;}/* Wait for BSS powerup */if (SOC_waitBSSPowerUp(socHandle, &errCode) < 0){/* Debug Message: */System_printf ("Debug: SOC_waitBSSPowerUp failed with Error [%d]\n", errCode);return 0;}/* Check if the SOC is a secure device */if (SOC_isSecureDevice(socHandle, &errCode)){/* Disable firewall for JTAG and LOGGER (UART) which is needed by all unit tests */SOC_controlSecureFirewall(socHandle,(uint32_t)(SOC_SECURE_FIREWALL_JTAG | SOC_SECURE_FIREWALL_LOGGER),SOC_SECURE_FIREWALL_DISABLE,&errCode);}MMWave_Global_Params.handle.socHandle = socHandle;/* Debug Message: */System_printf ("Debug: Launching the MMW HWA Demo\n");/* Initialize the Task Parameters. *//* 创建一个任务用于测试 */Task_Params_init(&taskParams);//taskParams.priority = 3; //优先级3MMWave_Global_Params.task.init = Task_create(MMWave_InitTask, &taskParams, NULL);/* Start BIOS */BIOS_start();return 0;
}
最是基础配置模板
包含了时钟 MPC DSS BSS上电等等
初始化后 调用GPIO和UART初始化
GPIO_init(); //GPIO初始化UART_init(); //串口初始化
同时进行引脚复用配置:
void Init_Pinmux(void)
{/* 串口引脚初始化 *//* 共有两个串口,分别为UART-1和UART-3,序号为0和2 *//* Setup the PINMUX to bring out the MSS UART-1 */Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINN5_PADBE, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);Pinmux_Set_FuncSel(SOC_XWR68XX_PINN5_PADBE, SOC_XWR68XX_PINN5_PADBE_MSS_UARTA_TX);Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINN4_PADBD, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);Pinmux_Set_FuncSel(SOC_XWR68XX_PINN4_PADBD, SOC_XWR68XX_PINN4_PADBD_MSS_UARTA_RX);// 这一块用不上/* Setup the PINMUX to bring out the MSS UART-3 */
// Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINF14_PADAJ, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);
// Pinmux_Set_FuncSel(SOC_XWR68XX_PINF14_PADAJ, SOC_XWR68XX_PINF14_PADAJ_MSS_UARTB_TX);/*********************************************************************** Setup the PINMUX:* - for QSPI Flash**********************************************************************/Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINR12_PADAP, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);Pinmux_Set_FuncSel(SOC_XWR68XX_PINR12_PADAP, SOC_XWR68XX_PINR12_PADAP_QSPI_CLK);Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINP11_PADAQ, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);Pinmux_Set_FuncSel(SOC_XWR68XX_PINP11_PADAQ, SOC_XWR68XX_PINP11_PADAQ_QSPI_CSN);Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINR13_PADAL, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);Pinmux_Set_FuncSel(SOC_XWR68XX_PINR13_PADAL, SOC_XWR68XX_PINR13_PADAL_QSPI_D0);Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINN12_PADAM, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);Pinmux_Set_FuncSel(SOC_XWR68XX_PINN12_PADAM, SOC_XWR68XX_PINN12_PADAM_QSPI_D1);Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINR14_PADAN, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);Pinmux_Set_FuncSel(SOC_XWR68XX_PINR14_PADAN, SOC_XWR68XX_PINR14_PADAN_QSPI_D2);Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINP12_PADAO, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);Pinmux_Set_FuncSel(SOC_XWR68XX_PINP12_PADAO, SOC_XWR68XX_PINP12_PADAO_QSPI_D3);
}
我这里只用了一个串口 引脚为:
SOC_XWR68XX_PINN4_PADBD
和SOC_XWR68XX_PINN4_PADBD
在手册上可以查到:
之后就是UART串口配置以及串口测试:
void Init_UART(void)
{UART_Params uart0_params;UART_Params_init(&uart0_params);uart0_params.baudRate = 115200; //波特率115200*8uart0_params.clockFrequency = MSS_SYS_VCLK; //系统时钟频率200MHzuart0_params.dataLength = UART_LEN_8; //8bit字长uart0_params.isPinMuxDone = 1; //已经完成引脚复用初始化uart0_params.parityType = UART_PAR_NONE; //无校验位uart0_params.readDataMode = UART_DATA_BINARY; //按位方式读取数据uart0_params.readEcho = UART_ECHO_OFF; //关闭回显uart0_params.readReturnMode = UART_RETURN_FULL; //完整读取uart0_params.stopBits = UART_STOP_ONE; //1停止位uart0_params.writeDataMode = UART_DATA_BINARY; //按位方式写入(发送)数据MMWave_Global_Params.handle.uart0_handle = UART_open(0, &uart0_params); //打开串口if(MMWave_Global_Params.handle.uart0_handle == NULL){System_printf("UART0 open fail\n!");return;}System_printf("UART0 open success\n!");uint8_t buf[]="[INFO] UART0 Test\n";UART_write(MMWave_Global_Params.handle.uart0_handle, buf, sizeof(buf));
}
在串口终端上面可以看到串口输出
串口回环:
while(1)
{//不断读取收到的数据,并通过串口发送出去//该函数会使进程进入挂起等待状态,不会使其他任务无法执行//可以发现打印任务也可以执行UART_read(handle, &dat, 1);UART_write(handle, &dat, 1);}
相关文章:

【TI毫米波雷达笔记】UART串口外设配置及驱动(以IWR6843AOP为例)
【TI毫米波雷达笔记】UART串口外设初始化配置及驱动(以IWR6843AOP为例) 最基本的工程建立好以后 需要给SOC进行初始化配置 int main (void) {//刷一下内存memset ((void *)L3_RAM_Buf, 0, sizeof(L3_RAM_Buf));int32_t errCode; //存放SOC初…...

C#---第十九课:不同类型方法的执行顺序(new / virtual / common / override)
本文介绍不同类型的方法,在代码中的执行顺序问题: 构造方法普通方法(暂用common代替)、虚方法(Virtual修饰)、New方法(new修饰)三个优先级相同overide方法(会替换virtual…...
[pytorch]torch.cuda用法以及判断显卡是不是存在问题
常见用法: torch.cuda.is_available() # 查看是否有可用GPU torch.cuda.device_count() # 查看GPU数量 torch.cuda.get_device_capability(device) # 查看指定GPU容量 torch.cuda.get_device_name(device) # 查看指定GPU名称 torch.cuda.empty_cache() # 清空程序占…...

JUC——多线程补充
前置可看 Java——多线程和锁_java多线程锁_北岭山脚鼠鼠的博客-CSDN博客 线程创建的三种方式 Thread、Runnable、Callable Thread类 Runable接口 Callable接口 Lamda表达式 Lamda表达式_北岭山脚鼠鼠的博客-CSDN博客 静态代理模式(Thread类的原理) 如下代码中 真实对象…...

代码随想录第32天|122.买卖股票的最佳时机 II,55. 跳跃游戏 ,45. 跳跃游戏 II
122.买卖股票的最佳时机 II 122. 买卖股票的最佳时机 II 思路比较简单 class Solution {public int maxProfit(int[] prices) {int res0,sum0;for(int i0;i<prices.length-1;i){if(prices[i1]-prices[i]>0){sumprices[i1]-prices[i];}ressum>res?sum:res;}return …...

Linux:Nginx服务与搭建
目录 一、Nginx概述 二、Nginx三大作用:反向代理、负载均衡、动静分离 三、Nginx和Apache 3.1Nginx和Apache的差异 3.2Nginx和Apache的优缺点比较 四、编译安装niginx 五、创建Nginx 自启动文件 六、Nginx的信号使用 6.1信号 七、升级 nginx1.18 nginx1.2…...
4、什么是NoSQL
4、什么是NoSQL NoSQL NoSQL Not Only SQL,就是不仅仅是SQL的意思 泛指非关系型数据库,随着web2.0的诞生!传统的关系型数据库很难对付web2.0时代,因为web2.0时代又很多数据大爆炸新生的产物比如视频、音乐、大数据产生的其他的数…...

如何自己实现一个丝滑的流程图绘制工具(一)vue如何使用
背景 项目需求突然叫我实现一个类似processOn一样的在线流程图绘制工具。 这可难倒我了,立马去做调研,在github上找了很多个开源的流程图绘制工具, 对比下来我还是选择了 bpmn-js 原因: 1、他的流程图是涉及到业务的,…...

ReoGrid.NET集成到winfrom
ReoGrid一个支持excel操作的控件,支持集成到任何winfrom项目内。 先看效果图: 如何使用: 使用ReoGrid自带excel模版设计工具先设计一个模版,设计器如下: 具体例子看官方文档 代码示例如下: var sheet reoGridControl1.CurrentWorksheet; …...
Elasticsearch实现增删改查
调用elasticsearch通常使用restful风格请求,这里记录一些常用的Java API和Postman Url Java API调用Es 1. 查询总文档数 Testvoid getAllCount() { // RestHighLevelClient clientnew RestHighLevelClient(RestClient.builder(new HttpHost("192.168…...
Rust 学习笔记(卷二)
文章目录 Rust 学习笔记(卷二)八、工程1. package 和 cratepackage 总览包根(crate root) 2. 模块初识模块单个源文件中的嵌套模块使用具有层级结构的源文件构造嵌套模块 3. 文档4. 使用第三方包5. 打包自己的包 九、标准库十、多…...
android amazon 支付接入
流程: 申请 Amazon 开发者帐号 ---> 在 amazon 控制台添加应用 ---> 添加应用内商品(消费类商品,授权类商品,订阅类商品)---> 导出 JSON 文件 --->集成 Amazon 支付 ---> 将导出的 JSON 文件 copy 到 …...

Vue2-快速搭建pc端后台管理系统
一.推荐二次开发框架 vue-element-admin Star(84k)vue-antd-admin Star(3.5k) 二.vue-element-admin 官网链接:https://panjiachen.github.io/vue-element-admin-site/zh/ 我这里搭建的是基础模版vue-admin-template(推荐) # 克隆项目 git clone https://github.com/PanJi…...

【产品文档】团队介绍PPT模板
今天和大家免费分享团队介绍的PPT模板。团队介绍是向他人展示团队的实力、专业性和能力的重要方式。通过一个有力的团队介绍,您可以突出团队的成员、经验、技能和取得的成就,从而增加信任、吸引合作伙伴、客户或投资者的兴趣 【模板预览】 动态演示效果…...

组件库的使用和自定义组件
目录 一、组件库介绍 1、什么是组件 2、组件库介绍 3、arco.design 二、组件库的使用 1、快速上手 2、主题定制 3、暗黑模式 4、语言国际化 5、业务常见问题 三、自定义组件 2、组件开发规范 3、示例实践guide-tip 4、业务组件快速托管 一、组件库介绍 1、什么是…...

网站和API支持HTTPS,最好在Nginx上配置
随着我们网站用户的增多,我们会逐渐意识到HTTPS加密的重要性。在不修改现有代码的情况下,要从HTTP升级到HTTPS,让Nginx支持HTTPS是个很好的选择。今天我们来讲下如何从Nginx入手,从HTTP升级到HTTPS,同时支持静态网站和…...

UnitTest笔记: 拓展库DDT的使用
DDT (Data-Drivers- Tests) 允许使用不同的测试数据运行同一个测试用例,展示为不同的测试用例。 第一步: pip安装 ddt 第二步: 创建test_baidu_ddt.py 1. 测试类要使用ddt 修饰 2. 不同形式的参数化: 列表,字典&a…...

裂缝检测,只依赖OPENCV,基于YOLO8S
裂缝检测,只依赖OPENCV,YOLOV8S 现在YOLOV8S训练目标非常方便,可以直接转换成ONNX让OPENCV调用,支持C/PYTHON,原理很简单,自己找博客,有兴趣相互交流...

python编程环境使用技巧3-程序打包pyinstaller
前言 在Python中,打包指的是将Python代码和相关资源(如配置文件、图像等)整合到一个可执行的文件或安装包中,以便于在其他环境中使用。 下面是使用pyinstaller进行打包的简要步骤: 1-安装pyinstaller:在命…...
Go 自学:defer关键字
我们可以使用defer关键字延迟代码的执行,相当于我们把代码放入一个stack中,遵循last in first out的原则输出代码。 package mainimport ("fmt" )func myDefer() {for i : 0; i < 5; i {defer fmt.Print(i)} }func main() {defer fmt.Prin…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...