keil5怎么添加stm32f103c8t6的库

时间: 2023-09-23 17:12:56 浏览: 30
在Keil5中添加STM32F103C8T6库可以按照以下步骤进行: 1. 打开Keil5软件,点击菜单栏的“Project”->“Manage”菜单项。 2. 在弹出的“Manage Project”窗口中,点击“Pack Installer”按钮。 3. 在“Pack Installer”窗口中,搜索“STM32F1xx_DFP”库,并选择对应的版本。 4. 点击“Install”按钮,等待安装完成。 5. 安装完成后,在工程文件夹中会自动生成一个名为“Drivers”的文件夹,其中包含了STM32F1xx_DFP库的头文件和源文件。 6. 在Keil5的工程中,点击菜单栏的“Project”->“Options for Target”菜单项。 7. 在弹出的“Options for Target”窗口中,选择“C/C++”选项卡,并在“Include Paths”中添加STM32F1xx_DFP库的头文件路径。 8. 点击“OK”保存设置,即可在Keil5中使用STM32F1xx_DFP库。
相关问题

keil5开发STM32F103C8T6的优势

1. 简单易学:Keil5开发环境相对于其他开发环境来说,操作简单易学,适合初学者使用。 2. 全面支持STM32F103C8T6:Keil5完全支持STM32F103C8T6,包括CMSIS、HAL库、ST库等,方便用户进行开发。 3. 高效稳定:Keil5开发环境运行效率高,稳定性好,能够保证开发过程的顺利进行。 4. 丰富的调试功能:Keil5开发环境提供了丰富的调试功能,包括单步调试、断点调试、观察变量等。 5. 多平台支持:Keil5支持Windows和Linux等多种平台,方便用户进行开发和移植。 6. 优秀的代码优化:Keil5具有优秀的代码优化功能,能够将代码的执行效率提高到最大。 7. 提供示例代码:Keil5提供了丰富的示例代码,方便用户进行学习和参考。

keil5建立stm32f103c8t6工程

### 回答1: Keil5中建立STM32F103C8T6工程的步骤如下: 1. 打开Keil5软件,在菜单栏中选择Project -> New uVision Project。 2. 在弹出的对话框中输入工程名称,并选择工程存储位置。 3. 选择Device: STM32F103C8Tx。 4. 选择Use Target Driver Library,这样就可以使用STM32F103C8T6的驱动库。 5. 点击OK, 等待工程建立完成。 6. 添加源文件, 并编写代码. 7. 配置好编译器以及调试器设置,编译并下载代码到MCU. 8. 完成,即可进行调试或程序测试. ### 回答2: Keil5是一款针对ARM微控制器的集成开发环境,可以通过该软件来创建STM32F103C8T6工程。下面是具体步骤: 第一步,打开Keil5软件并进入创建新工程界面。选择“Project”菜单中的“New µVision Project”。 第二步,选择工程存放的目录和文件名,并点击“Save”保存工程。 第三步,选择所使用的芯片型号。在“Device”菜单下的“Select”选项中选择“STMicroelectronics”并在下拉菜单中找到“STM32F1”系列。在系列下找到“STM32F103C8T6”并点击“OK”按钮。 第四步,添加程序文件。在“Project”菜单下选择“Add File to Project”,在弹出的窗口中选择需要添加的程序文件并点击“Add”按钮。 第五步,配置工程属性。在“Project”菜单下选择“Options for Target”,在弹出的窗口中选择“C/C++”标签页并进行相应的配置,包括代码生成工具、编译选项等。 第六步,编译工程。在Keil5界面左侧的“Project”窗口中选择所创建的工程,点击菜单栏中的“Build”按钮进行编译。 第七步,下载程序。连接好目标板后,在Keil5界面中选择“Flash”菜单下的“Configure Flash Tools”选项来设置烧录参数,然后点击“Download”来下载程序到目标板。 通过以上步骤,即可建立STM32F103C8T6工程。需要注意的是,在配置各项参数时,应该根据具体需求进行相应的选择和设置,才能保证工程的顺利实施和运行。 ### 回答3: Keil 5是一种先进的集成开发环境,可用于嵌入式系统的开发,用它来建立STM32F103C8T6工程非常便捷。下面将详细介绍如何用Keil 5建立STM32F103C8T6工程。 第一步是打开Keil 5软件,点击菜单栏中的“File(文件)”-“New Project(新建工程)”。 第二步是选择“Device(器件)”选项卡并输入“stm32f103c8”进行搜索。然后选择STMicroelectronics公司的“STM32F103C8”器件,然后点击“OK”。 第三步是在“Project Name(工程名称)”中输入一个适当的名称,在“Project Path(工程路径)”中指定将要存储项目的目录,然后单击“Save(保存)”以创建工程。 第四步是选择适当的编译器。Keil 5软件默认使用Keil C Compiler,但也支持其他编译器。选择Keil C Compiler,然后单击“OK”完成此步骤。 第五步是在“Target(目标)”选项卡中,选择适当的仿真器、目标硬件和调试接口。 第六步是在“Debug(调试)”选项卡中配置工程的调试模式。选择“Use Simulator(使用仿真器)”并选择仿真器。然后点击“OK”。 第七步是在“Project(工程)”窗口中添加需要的文件和库,包括头文件、源文件和库文件等等。 第八步是编写代码,同时在Keil 5软件中进行编译、构建及调试。通过单击“Build Target(构建目标)”按钮,构建工程并生成hex文件。 最后,通过连接开发板和PC,并通过仿真器与目标硬件进行连接,下载hex文件进行运行。 总之,在Keil 5中建立STM32F103C8T6工程比较简单。通过上述步骤,可以很容易地建立一个STM32F103C8T6工程,并使用Keil 5进行高效开发。

相关推荐

非常感谢您的提问。以下是使用Keil5编写STM32F103C8T6超声波代码的示例: #include "stm32f10x.h" #include "delay.h" #include "usart.h" #define TRIG_PIN GPIO_Pin_0 #define ECHO_PIN GPIO_Pin_1 #define TRIG_PORT GPIOA #define ECHO_PORT GPIOA void TIM2_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); TIM_TimeBaseStructure.TIM_Period = 0xFFFF; TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); TIM_Cmd(TIM2, ENABLE); } void Ultrasonic_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = TRIG_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(TRIG_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = ECHO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(ECHO_PORT, &GPIO_InitStructure); } float Ultrasonic_GetDistance(void) { uint32_t start, end; float distance; GPIO_ResetBits(TRIG_PORT, TRIG_PIN); delay_us(2); GPIO_SetBits(TRIG_PORT, TRIG_PIN); delay_us(10); GPIO_ResetBits(TRIG_PORT, TRIG_PIN); while (GPIO_ReadInputDataBit(ECHO_PORT, ECHO_PIN) == RESET); start = TIM_GetCounter(TIM2); while (GPIO_ReadInputDataBit(ECHO_PORT, ECHO_PIN) != RESET); end = TIM_GetCounter(TIM2); distance = (float)(end - start) * 0.017; return distance; } int main(void) { float distance; SystemInit(); delay_init(); USART1_Init(); Ultrasonic_Init(); TIM2_Init(); while (1) { distance = Ultrasonic_GetDistance(); printf("Distance: %.2f cm\r\n", distance); delay_ms(500); } } 希望这可以帮助您!
以下是使用Keil5和STM32F103C8T6微控制器实现PWM呼吸灯的示例代码: 首先,在主函数中调用PWM_Configuration函数进行初始化: c int main(void) { PWM_Configuration(); while (1) { for (uint16_t duty_cycle = 0; duty_cycle <= 1000; duty_cycle++) { TIM_SetCompare1(TIM2, duty_cycle); for (int i = 0; i < 1000; i++); } for (uint16_t duty_cycle = 1000; duty_cycle >= 0; duty_cycle--) { TIM_SetCompare1(TIM2, duty_cycle); for (int i = 0; i < 1000; i++); } } } 然后,在PWM_Configuration函数中进行TIM2定时器的初始化,设置输出通道1为PWM模式: c void PWM_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; // 使能TIM2和GPIOA的时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 配置GPIOA.1为复用推挽输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // 配置TIM2 TIM_TimeBaseStructure.TIM_Prescaler = 71; // 时钟预分频,72MHz/72=1MHz TIM_TimeBaseStructure.TIM_Period = 999; // 定时器计数器上限,1MHz/1000=1kHz TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分频 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); // 配置TIM2输出通道1为PWM模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; // PWM占空比的初始值 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM2, &TIM_OCInitStructure); TIM_Cmd(TIM2, ENABLE); // 使能TIM2定时器 } 以上示例代码中,通过改变PWM输出通道1的占空比,实现了呼吸灯的效果。具体来说,先从0逐渐增加到1000,再从1000逐渐减小到0,然后不断重复这个过程。其中休眠1000次循环,可以控制呼吸灯的闪烁速度。
好的,以下是一个简单的在Keil5中使用STM32F103C8T6实现PWM呼吸灯的工程代码: c #include "stm32f10x.h" #define LED_PIN GPIO_Pin_13 #define LED_GPIO_PORT GPIOC #define LED_GPIO_CLK RCC_APB2Periph_GPIOC #define TIM_PERIOD 255 void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(LED_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = LED_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(LED_GPIO_PORT, &GPIO_InitStructure); } void TIM_Configuration(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_TimeBaseStructure.TIM_Period = TIM_PERIOD; TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC3Init(TIM3, &TIM_OCInitStructure); TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); TIM_Cmd(TIM3, ENABLE); } void delay(uint32_t n) { while(n--) { __NOP(); } } int main(void) { uint8_t duty_cycle = 0; uint8_t direction = 1; GPIO_Configuration(); TIM_Configuration(); while(1) { TIM_SetCompare3(TIM3, duty_cycle); if(duty_cycle == 0) { direction = 1; } else if(duty_cycle == TIM_PERIOD) { direction = -1; } duty_cycle += direction; delay(20000); } } 在这个代码中,我们使用了STM32F103C8T6的Timer3和PWM输出来控制LED的亮度。我们通过一个死循环来改变占空比,从而实现呼吸灯的效果。请注意,我们使用了TIM_PERIOD来设置PWM的周期,这里设置为255,即PWM的最大值。我们还使用了72-1来预分频Timer3的时钟,这样计数器每计数一次,就会产生一个时钟周期,即1us。在while循环中,我们使用了delay函数来降低占空比改变的速度,以便更好地观察呼吸灯的效果。 希望这个代码可以帮助到你!
STM32F103C8T6 HAL库是针对STM32F103C8T6开发板的硬件抽象层库。它包含了一系列的文件夹,如CORE、HALLIB、OBJ、PRO、SYSTEM和USER等。这个库可以为开发者提供方便的开发环境和开发工具,使得开发者能够更快速、更高效地进行STM32F103C8T6的开发工作。使用STM32F103C8T6 HAL库,开发者可以通过简单的函数调用来实现各种功能,如点亮LED灯、控制定时器、发送和接收串口数据等。 此外,还有一份基础开发教程,其中包括了配置开发环境、使用Keil进行开发、点亮LED灯、控制定时器、串口通信和使用传感器等内容。这些教程可以帮助开发者快速入门STM32F103C8T6的开发,掌握HAL库的使用方法。 如果你需要获取STM32F103C8T6 HAL库和相关的教程,你可以在文章末尾下载压缩包并解压,然后在Keil中导入STM32F103Pack包,或者直接从官方网站下载STM32CubeMX并安装,然后使用该软件生成你的第一个工程。同时,你还可以参考bsp.h头文件中的内容来初始化你的开发板。123 #### 引用[.reference_title] - *1* [STM32F103C8T6 HAL库工程模板](https://download.csdn.net/download/qq_44744164/12918149)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [STM32F103C8T6基础开发教程(HAL库)—开发环境配置](https://blog.csdn.net/qq_38191568/article/details/126012144)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [STM32F103C8T6移植uCOS基于HAL库](https://blog.csdn.net/weixin_46075497/article/details/121718285)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
### 回答1: STM32F103C6T6和STM32F103C8T6都是STM32F1系列的微控制器,都基于ARM Cortex-M3内核。它们的主要区别在于存储器大小和引脚数。STM32F103C6T6具有32KB闪存和48引脚,而STM32F103C8T6具有64KB闪存和48引脚。因此,如果您需要更大的存储器容量,您应该选择STM32F103C8T6。 ### 回答2: STM32F103C6T6和STM32F103C8T6都是STM32F1系列的MCU,都有相同的CPU内核,Flash和SRAM容量,以及相同的外设和工作频率范围。它们之间最大的不同是包装和引脚数。 STM32F103C6T6采用LQFP48(7mm x 7mm)封装,具有少量的引脚,只有36个,其中包括多个GPIO引脚、USART、SPI、I2C、定时器、ADC等外设,因此适合用于需要紧凑尺寸的应用,比如手持设备、仪器和家用电器等。 STM32F103C8T6采用LQFP48(7mm x 7mm)封装,具有64个引脚,除了与C6T6相同的外设外,它还有额外的GPIO引脚、USB口、CAN总线等接口。因此,C8T6通常用于需要更多外设和更多GPIO的应用,如自动控制系统、仪表、通讯等。 需要注意的是,由于C6T6的引脚较少,也因此成本更低,但C8T6的引脚更多,因此价格较高。概括来说,如果您需要更多的GPIO和外设接口,可以选择STM32F103C8T6,否则可以选择STM32F103C6T6。 ### 回答3: STM32F103C6T6和STM32F103C8T6是ST公司推出的两款基于Arm Cortex-M3内核的单片机芯片。它们是STM32F103系列的成员,都具有高性能、低功耗、丰富的外设资源和易于开发的特点。这两款芯片之间主要的区别在于存储器和外设的数量。 首先来看STM32F103C6T6,它的Flash存储器容量为32KB,SRAM存储器容量为10KB,同时还提供了4个定时器、2个SPI、3个USART、2个I2C和37个通用I/O口。尽管存储器容量较小,但是对于一些资源要求不高的应用场景还是具有一定的市场竞争力的。 而STM32F103C8T6则在存储器和外设方面更为丰富,它的Flash存储器容量为64KB,SRAM存储器容量为20KB。同时还提供了3个定时器、2个SPI、3个USART、2个I2C、1个CAN和37个通用I/O口。相比于C6T6,它的存储器容量更大,外设的数量也更多。对于一些需要大存储器和多外设支持的应用来说,C8T6可以更好的满足这些需求。 从开发角度来看,两款芯片开发工具链和资料支持都是一致的,如STM32CubeMX、Keil、IAR等。因此,在选型时需要评估具体应用的需求,考虑到制造成本、资源是否复杂、性能和可靠性等要素,选择合适的芯片型号,才能设计出能够满足市场需求且成本控制在合理范围的产品。
STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,它广泛用于嵌入式系统开发。对于标准库的使用,您可以使用STM32Cube软件包提供的固件库。以下是使用STM32Cube库进行STM32F103C8T6标准库开发的一般步骤: 1. 安装STM32Cube软件包:您可以从STMicroelectronics官方网站下载并安装STM32Cube软件包。它包含了针对不同型号的STM32微控制器的固件库和例程。 2. 创建新的工程:使用STM32CubeMX工具创建新的工程。该工具可帮助您配置微控制器引脚、外设和时钟设置,生成初始化代码和项目文件。 3. 选择固件库:在STM32CubeMX中,您可以选择使用标准库来生成初始化代码。确保在“Project Settings”选项卡中选择“Generate peripheral initialization as a pair of '.c/.h' files per peripheral”。 4. 生成代码:配置完毕后,点击“Project”菜单中的“Generate Code”选项,生成初始化代码和项目文件。 5. 导入工程到集成开发环境(IDE):将生成的代码导入您选择的IDE中,例如Keil MDK、IAR Embedded Workbench等。 6. 编写应用程序:在IDE中编写应用程序代码,可以使用标准库提供的函数进行外设初始化和操作。 7. 编译和下载:编译应用程序,并将生成的可执行文件下载到STM32F103C8T6微控制器中进行测试和调试。 请注意,以上步骤是一般性的指导,具体的步骤可能因您选择的开发工具和环境而有所不同。您可以参考STMicroelectronics官方文档和示例代码以获取更详细的信息和指导。

最新推荐

STM32工程在keil下怎么移植到IAR环境(stm32f103c8).docx

选择工程使用的芯片型号,stm32f103c8t6,这里自己根据自己设置哦。 b.Library Configuration的Library要设置为Full,这样才能使用printf(); b. 进入C/C++Compiler,添加文件路径和所需的宏定义。 到此路径...

Android 开发视频播放器源码代码逻辑清晰.zip

Android 开发视频播放器源码代码逻辑清晰

经典织构分析软件textool-欧拉角与米勒指数相互转换.zip

经典织构分析软件textool-欧拉角与米勒指数相互转换

Java 开发项目申报系统源码ssh框架+数据库.zip

Java 开发项目申报系统源码ssh框架+数据库

Java 开发教学管理项目源码+数据库项目可运行无报错,代码清晰适合新手.rar

Java 开发教学管理项目源码+数据库项目可运行无报错,代码清晰适合新手

基于at89c51单片机的-智能开关设计毕业论文设计.doc

基于at89c51单片机的-智能开关设计毕业论文设计.doc

"蒙彼利埃大学与CNRS联合开发细胞内穿透载体用于靶向catphepsin D抑制剂"

由蒙彼利埃大学提供用于靶向catphepsin D抑制剂的细胞内穿透载体的开发在和CNRS研究单位- UMR 5247(马克斯·穆塞隆生物分子研究专长:分子工程由Clément Sanchez提供于2016年5月26日在评审团面前进行了辩护让·吉隆波尔多大学ARNA实验室CNRS- INSERM教授报告员塞巴斯蒂安·帕波特教授,CNRS-普瓦捷大学普瓦捷介质和材料化学研究所报告员帕斯卡尔·拉斯特洛教授,CNRS-审查员让·马丁内斯蒙彼利埃大学Max Mousseron生物分子研究所CNRS教授审查员文森特·利索夫斯基蒙彼利埃大学Max Mousseron生物分子研究所CNRS教授论文主任让-弗朗索瓦·赫尔南德斯CNRS研究总监-蒙彼利埃大学Max Mousseron生物分子研究论文共同主任由蒙彼利埃大学提供用于靶向catphepsin D抑制剂的细胞内穿透载体的开发在和CNRS研究单位- UMR 5247(马克斯·穆塞隆生物分子研究专长:分子工程由Clément Sanchez提供�

设计一个程序有一个字符串包含n个字符 写一个函数 将此字符串中从第m个字符开始的全部字符复制成为另一个字符串 用指针c语言

以下是用指针实现将字符串中从第m个字符开始的全部字符复制成为另一个字符串的C语言程序: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> void copyString(char *a, char *b, int n, int m); int main() { int n, m; char *a, *b; printf("请输入字符串长度n:"); scanf("%d", &n); a = (char*)malloc(n * sizeof(char)); b =

基于C#多机联合绘图软件的实现-毕业设计论文.doc

基于C#多机联合绘图软件的实现-毕业设计论文.doc

4G车载网络中无线电资源的智能管理

4G车载网络中无线电资源的智能管理汽车网络从4G到5G的5G智能无线电资源管理巴黎萨克雷大学博士论文第580号博士学院博士专业:网络、信息与通信研究单位:巴黎萨克雷大学,UVSQ,LI PARAD,78180,法国伊夫林省圣昆廷参考:凡尔赛大学-伊夫林省圣昆廷论文于11月30日在巴黎萨克雷发表并答辩2021年,由玛丽亚姆·阿卢奇·马迪陪审团组成Pascal Lorenz总裁上阿尔萨斯大学大学教授Mohamed Yacine Ghamri-Doudane拉罗谢尔大学报告员和审查员教授Rami Langar报告员和审查员马恩河谷大学Oyunchimeg SHAGDARVEDECOM研发(HDR)团队负责人审查员论文方向Samir TOHME博士生导师巴黎萨克雷大学名誉教授UVSQ/LI- PARADKALLEL KHEMIRI共同监督巴黎萨克雷UVSQ/大卫Guy Pujolle受邀索邦大学Tara Yahiya邀请巴黎萨克雷大学/LISN高级讲师(HDR)博士论文NNT:2021UPASG061谢谢你首先,我要感谢我的论文导师M.萨米�