济南手机网站建设报价ps切图做网站

当前位置: 首页 > news >正文

济南手机网站建设报价,ps切图做网站,个人备案做企业网站,专业制作网站的公司前言 最近一直在搞3568的东西#xff0c;涉及到底层的设备树修改#xff0c;驱动编写等等#xff0c;忙的焦头烂额的#xff0c;也没时间往下面写东西了。今天差不多底层的东西快弄完了#xff0c;把最近的感悟给大家分享下#xff0c;并且加入点设备树的基础知识。给刚刚…前言 最近一直在搞3568的东西涉及到底层的设备树修改驱动编写等等忙的焦头烂额的也没时间往下面写东西了。今天差不多底层的东西快弄完了把最近的感悟给大家分享下并且加入点设备树的基础知识。给刚刚涉足开发板学习的小伙伴一点帮助。当然对于大神们来说写的肯定是皮毛。一起共勉 基础 涉及到的知识我会用类比的方法和STM32的硬件做对比其实弄完之后发现两个差不多没有什么本质的区别。所以小伙伴看之前的基础是必须编写过单片机的程序对单片机的架构有一定的了解要不看完会更迷茫。 题外话 学习这个真是很痛苦并且不知道自己做的对不对需要一遍一遍的测试。并且问了其他小伙伴有一个共同的感觉随着年龄的增加学习能力大大下降。并且已经抽不出那么多精力去学习能力了。 每天刷抖音看到什么35岁失业什么的其实吧感觉有三个原因吧仅仅是自己猜测 1技术没有做扎实就转到管理岗了。公司发展太快所以刚进去的技术还没有很好的基础就转到管理使得自己的技术不扎实再从管理岗转回来已经很难了。 2技术也不错但是忘记了学习一直做自己习惯的东西然后到了管理。但是到了管理之后技术更新了以前的技术已经适应不了现在的东西了。这个应该是大部分人的问题吧。就算在一个技术上做的时间长了也会不学习了感觉现在的东西够了。当然学习新的东西会很难、很闹心。其实我也想一直做单片机也就控制几个灯控制几个外设。然后搞搞逻辑啥的。一直在自己的舒适区。 3技术也够学习也一直在学但是换个工作工资低了不愿将就。但愿每个人都是因为这个原因。 内容 这次介绍4个内容都是最简单的外设1GPIO2串口3I2C4CAN。这4个应该能包含大部分硬件应用了当然还有麻烦的后面再慢慢介绍一点一点的来。先介绍最基本的大概有个印象。 1.GPIO GPIO_InitTypeDef GPIO_Initure;__HAL_RCC_GPIOE_CLK_ENABLE(); GPIO_Initure.Pin GPIO_PIN_15; GPIO_Initure.Mode GPIO_MODE_INPUT; GPIO_Initure.Pull GPIO_PULLUP; GPIO_Initure.Speed GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(GPIOE, GPIO_Initure); 这个是单片机的GPIO初始化。定义GPIO结构体开时钟管脚号管脚输入管脚模式管脚速度参数传入结构体。 HAL_GPIO_WritePin(GPIOE, GPIO_PIN_9, GPIO_PIN_SET); 这个是控制程序。直接根据HALk库给的函数就行。要是不用HAL库自己控制也都是别人给好的API函数。 对比下来在Linux的3568设备树里 gpioled1 {compatible MY,led1;led1-gpio gpio0 RK_PD5 GPIO_ACTIVE_HIGH;status okay;}; 先说第二句gpio的管脚定义第三句状态定义。 第一句是匹配定义这个后面再说。后面牵涉到驱动部分这个后面会详细介绍所以现在先由个概念知道是这么回事。 至此到这里GPIO的设备树部分介绍完毕。下面说下两者的区别仅仅说对于GPIO设定部分的区别哈其他的就不说了没啥用。 相同点定义了管脚并且定义了初始电平 不同点单片机定义了管脚的输入和输出3568定义了匹配字。至于语法的区别就不做过多的介绍了。 所以3568里面还需要对其他的进行定义第一个输入输出定义第二个控制程序。这个后面再说。先说下输入输出定义在驱动里面定义控制程序也是线程的API只要拿过来使用就行了。 2.串口 GPIO_InitStruct.Pin GPIO_PIN_2|GPIO_PIN_3;GPIO_InitStruct.Mode GPIO_MODE_AF_PP;GPIO_InitStruct.Pull GPIO_NOPULL;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate GPIO_AF7_USART2;HAL_GPIO_Init(GPIOA, GPIO_InitStruct); 先说第一部分管脚定义。这部分应该很熟悉定义管脚定义管脚复用然后定义复用到什么上面然后参数传入结构体。这部分是管脚的定义。 huart2.Instance USART2;huart2.Init.BaudRate 1000000;huart2.Init.WordLength UART_WORDLENGTH_8B;huart2.Init.StopBits UART_STOPBITS_1;huart2.Init.Parity UART_PARITY_NONE;huart2.Init.Mode UART_MODE_TX_RX;HAL_UART_Init(huart2); 然后说第二部分串口定义。前面定义了管脚相当于管脚已经复用到了串口上然后定义串口的信息。对应串口2波特率起始位停止位等。 HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);HAL_NVIC_EnableIRQ(USART2_IRQn); 然后就是中断函数接收和发送中断。对应的就是接收和发送函数中断。这个API在it.c里面应该可以找到。要是找不到就直接去库函数里面找。 对比下来在3568的设备树里     uart1 {/omit-if-no-ref/uart1m0_xfer: uart1m0-xfer {rockchip,pins /* uart1_rxm0 /2 RK_PB3 2 pcfg_pull_up,/ uart1_txm0 /2 RK_PB4 2 pcfg_pull_up;};/omit-if-no-ref/uart1m0_ctsn: uart1m0-ctsn {rockchip,pins / uart1m0_ctsn /2 RK_PB6 2 pcfg_pull_none;};/omit-if-no-ref/uart1m0_rtsn: uart1m0-rtsn {rockchip,pins / uart1m0_rtsn /2 RK_PB5 2 pcfg_pull_none;};/omit-if-no-ref/uart1m1_xfer: uart1m1-xfer {rockchip,pins / uart1_rxm1 /3 RK_PD7 4 pcfg_pull_up,/ uart1_txm1 /3 RK_PD6 4 pcfg_pull_up;};/omit-if-no-ref/uart1m1_ctsn: uart1m1-ctsn {rockchip,pins / uart1m1_ctsn /4 RK_PC1 4 pcfg_pull_none;};/omit-if-no-ref/uart1m1_rtsn: uart1m1-rtsn {rockchip,pins / uart1m1_rtsn */4 RK_PB6 4 pcfg_pull_none;};}; 这个是pinctrl里面的设备树结构。里面包含串口的各种复用管脚定义。里面m0和m1可以自己选择当然选择方法在后面。 对比不同点单片机里面直接写出来用哪个管脚用哪个需要自己去写。而3568里面全部给你写出来然后你自己再配置。 uart1: serialfe650000 {compatible rockchip,rk3568-uart, snps,dw-apb-uart;reg 0x0 0xfe650000 0x0 0x100;interrupts GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH;clocks cru SCLK_UART1, cru PCLK_UART1;clock-names baudclk, apb_pclk;reg-shift 2;reg-io-width 4;dmas dmac0 2, dmac0 3;pinctrl-names default;pinctrl-0 uart1m0_xfer;status disabled;}; 然后底层的设备树这部分不用修改别人给写好的。至于怎么写不用管只知道在这里就行。 解释下匹配字状态寄存器地址。中断地址时钟时钟名称寄存器偏移寄存器宽度DMA管脚名称管脚初始定义。 其实在单片机里中断函数已经给你配好了而设备树里直接给你写出来了。怎么写的 千万别去研究别人做好的直接用就行或者直接知道是啥东西就行。然后管脚选用的是m0。这个是别人的初始定义后面可以再修改。所以这个地方就看看知道是啥就行至于reg啥的千万别管。 uart1 {status okay;pinctrl-0 uart1m1_xfer; }; 这是后面的自己定义。前面别人给个初始的后面用不用看自己。用的话就来个okay不用就不用管。要是用的话管脚不一样咋弄那就给改改。 然后然后就没了。就那么多东西。 对于GPIO中的驱动GPIO的驱动简单可以自己写一个。但是串口的比较麻烦别人都写好了不用管。配好设备树之后linux会自己加载驱动函数。就像单片机里面的收发中断然后放到buffer里面。其实你也不知道咋驱动的就是可以收到数然后解析就行。 切记千万别深究千万别深究。 不同 设备树放的比较乱如果别人开发的不好放的会更乱所以选开发板的时候选大厂的。放的位置好你就好看点学习起来也快。至于程序放的位置放哪都行随你意但是最好按照别人写好的去放看起来方便。 单片机里面的东西都是一块一块的相对来说别人都给你封好了3568或者其他开发板里面的程序都是按照功能一大块放一起看起来比较麻烦。 总结 设备树就是将单片机的不同的功能大家放一起然后自己挑出来。并且用很晦涩的表达方式表达出来不用看懂具体是啥也不用纠结怎么去编写会改管脚就行。给的pdf里面肯定会有说明怎么弄要是没有引用别人的话赶紧跑路还搞啥自己肯定编不了。 后续 接触的时候脑袋疼这是啥这又是啥。当真的去一个一个的琢磨之后才发现哦和单片机差不多。学习顺序克服心理障碍静下心一句一句的看不会的查改改改不用担心改错反正也改不坏。还有一定要做好备份在修改任何东西前一定先保存一份万一改错了还能复原再从开始改。 后面介绍I2C和CAN的设备树然后再介绍GPIO的驱动函数然后就再ETH然后再其他的。慢慢来。喜欢的小伙伴点个关注后续文章继续发送。